Net framework 5, а также среды Visual Studio 2012 и C#


Методы перегруженных операторов



Download 6,27 Mb.
Pdf ko'rish
bet163/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   159   160   161   162   163   164   165   166   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Методы перегруженных операторов
В некоторых языках тип может определять, как операторы должны манипулировать 
его экземплярами. В частности, многие типы (например, 
System.String

System.
Decimal
и 
System.DateTime
) используют перегрузку операторов равенства (
==

и неравенства (
!=
). CLR ничего не известно о перегрузке операторов — ведь среда 
даже не знает, что такое оператор. Смысл операторов и код, который должен быть 
сгенерирован, когда тот или иной оператор встретится в исходном тексте, опреде-
ляется языком программирования.
Например, если в программе на C# поставить между обычными числами опе-
ратор 
+
, компилятор генерирует код, выполняющий сложение двух чисел. Когда 
оператор 
+
применяют к строкам, компилятор C# генерирует код, выполняющий 
конкатенацию этих строк. Для обозначения неравенства в C# используется опера-
тор 
!=
, а в Visual Basic — оператор 
<>
. Наконец, оператор 
^
в C# задает операцию 
«исключающее или» (XOR), тогда как в Visual Basic это возведение в степень.
Хотя CLR ничего не знает об операторах, среда указывает, как языки програм-
мирования должны предоставлять доступ к перегруженным операторам, чтобы 


227
Методы.перегруженных.операторов
последние могли легко использоваться в коде на разных языках программирования. 
Для каждого конкретного языка проектировщики решают, будет ли этот язык под-
держивать перегрузку операторов и, если да, какой синтаксис задействовать для 
представления и использования перегруженных операторов. С точки зрения CLR 
перегруженные операторы представляют собой просто методы.
От выбора языка зависит наличие поддержки перегруженных операторов и их 
синтаксис, а при компиляции исходного текста компилятор генерирует метод, 
определяющий работу оператора. Спецификация CLR требует, чтобы перегру-
женные операторные методы были открытыми и статическими. Дополнительно 
C# (и многие другие языки) требует, чтобы у операторного метода тип, по крайней 
мере, одного из параметров или возвращаемого значения совпадал с типом, в ко-
тором определен операторный метод. Причина этого ограничения в том, что оно 
позволяет компилятору C# в разумное время находить кандидатуры операторных 
методов для привязки.
Пример метода перегруженного оператора, заданного в определении класса C#:
public sealed class Complex {
public static Complex operator+(Complex c1, Complex c2) { ... }
}
Компилятор генерирует определение метода 
op_Addition
и устанавливает в за-
писи с определением этого метода флаг 
specialname
, свидетельствующий о том, что 
это «особый» метод. Когда компилятор языка (в том числе компилятор C#) видит 
в исходном тексте оператор 
+
, он исследует типы его операндов. При этом компи-
лятор пытается выяснить, не определен ли для одного из них метод 
op_Addition
с флагом 
specialname
, параметры которого совместимы с типами операндов. Если 
такой метод существует, компилятор генерирует код, вызывающий этот метод, 
иначе возникает ошибка компиляции.
В табл. 8.1 и 8.2 приведен набор унарных и бинарных операторов, которые C# 
позволяет перегружать, их обозначения и рекомендованные имена соответствующих 
методов, которые должен генерировать компилятор. Третий столбец я прокоммен-
тирую в следующем разделе.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   159   160   161   162   163   164   165   166   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish