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



Download 6,27 Mb.
Pdf ko'rish
bet167/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   163   164   165   166   167   168   169   170   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.8 .Методы
public sealed class Rational {
// Создает Rational из Int32
public Rational(Int32 num) { ... }
// Создает Rational из Single
public Rational(Single num) { ... }
// Преобразует Rational в Int32
public Int32 ToInt32() { ... }
// Преобразует Rational в Single
public Single ToSingle() { ... }
// Неявно создает Rational из Int32 и возвращает полученный объект
public static implicit operator Rational(Int32 num) {
return new Rational(num); }
// Неявно создает Rational из Single и возвращает полученный объект
public static implicit operator Rational(Single num) {
return new Rational(num); }
// Явно возвращает объект типа Int32, полученный из Rational
public static explicit operator Int32(Rational r) {
return r.ToInt32(); }
// Явно возвращает объект типа Single, полученный из Rational
public static explicit operator Single(Rational r) {
return r.ToSingle();
}
}
При определении методов для операторов преобразования следует указать, дол-
жен ли компилятор генерировать код для их неявного вызова автоматически или 
лишь при наличии явного указания в исходном тексте. Ключевое слово 
implicit
указывает компилятору C#, что наличие в исходном тексте явного приведения типов 
не обязательно для генерации кода, вызывающего метод оператора преобразования. 
Ключевое слово 
explicit
позволяет компилятору вызывать метод только тогда, 
когда в исходном тексте происходит явное приведение типов.
После ключевого слова 
implicit
или 
explicit
вы сообщаете компилятору, 
что данный метод представляет собой оператор преобразования (ключевое слово 
operator
). После ключевого слова 
operator
указывается целевой тип, в который 
преобразуется объект, а в скобках — исходный тип объекта.
Определив в показанном ранее типе 
Rational
операторы преобразования, можно 
написать (на C#):
public sealed class Program {
public static void Main() {
Rational r1 = 5; // Неявное приведение Int32 к Rational
Rational r2 = 2.5F; // Неявное приведение Single к Rational
Int32 x = (Int32) r1; // Явное приведение Rational к Int32
Single s = (Single) r2; // Явное приведение Rational к Single
}
}


233
Методы.операторов.преобразования
При исполнении этого кода «за кулисами» происходит следующее. Компилятор 
C# обнаруживает в исходном тексте операции приведения (преобразования типов) 
и при помощи внутренних механизмов генерирует IL-код, который вызывает методы 
операторов преобразования, определенные в типе 
Rational
. Но каковы имена этих 
методов? На этот вопрос можно ответить, скомпилировав тип 
Rational
и изучив его 
метаданные. Оказывается, компилятор генерирует по одному методу для каждого 
из определенных операторов преобразования. Метаданные четырех методов опе-
раторов преобразования, определенных в типе 
Rational
, выглядят примерно так:
public static Rational op_Implicit(Int32 num)
public static Rational op_Implicit(Single num)
public static Int32 op_Explicit(Rational r)
public static Single op_Explicit(Rational r)
Как видите, методы, выполняющие преобразование объектов одного типа в объ-
екты другого типа, всегда называются 
op_Implicit
или 
op_Explicit
. Определять 
оператор неявного преобразования следует, только когда точность или величина 
значения не теряется в результате преобразования, например при преобразовании 
Int32
в 
Rational
. Если же точность или величина значения в результате преобра-
зования теряется (например, при преобразовании объекта типа 
Rational
в 
Int32
), 
следует определять оператор явного преобразования. Если попытка явного пре-
образования завершится неудачей, следует сообщить об этом, выдав в методе ис-
ключение 
OverflowException
или 
InvalidOperationException
.

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   163   164   165   166   167   168   169   170   ...   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