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


использование переменных обобщенного типа в качестве операндов



Download 6,27 Mb.
Pdf ko'rish
bet240/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   236   237   238   239   240   241   242   243   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

использование переменных обобщенного типа в качестве операндов
Следует заметить, что использование операторов с операндами обобщенного типа 
создает немало проблем. В главе 5 я показал, как C# обрабатывает примитивные 
типы — 
Byte

Int16

Int32

Int64

Decimal
и др. В частности, я отметил, что C# умеет 
интерпретировать операторы, применяемые к элементарным типам (например 
+



*
и 
/
). Однако эти операторы нельзя использовать с переменными обобщенного 
типа, потому что во время компиляции компилятор не знает их тип. Получается
что нельзя спроектировать математический алгоритм для произвольных числовых 
типов данных. Допустим, я попытаюсь написать следующий обобщенный метод:
private static T Sum(T num) where T : struct {
T sum = default(T) ;
for (T n = default(T) ; n < num ; n++)
sum += n;
return sum;
}
Я сделал все возможное, чтобы он скомпилировался: определил ограничение 
struct
для 
Т
и использовал конструкцию 
default(T)
, чтобы 
sum
и 
n
инициализи-
ровались нулем. Но при компиляции кода выдаются три сообщения об ошибках:
‰
ошибка CS0019: оператор 
<
нельзя применять к операндам типа 
T
и 
Т
:
error CS0019: Operator '<' cannot be applied to operands 
of type 'T' and 'T'


332
Глава.12 .Обобщения
‰
ошибка CS0023: оператор 
++
нельзя применять к операнду типа 
Т
:
error CS0023: Operator '++' cannot be applied to operand of type 'T'
‰
ошибка CS0019: оператор 
+=
нельзя применять к операндам типа 
T
и 
Т
:
error CS0019: Operator '+=' cannot be applied to operands 
of type 'T' and 'T'
Это существенно ограничивает поддержку обобщений в среде CLR, и многие 
разработчики (особенно из научных, финансовых и математических областей) 
испытали глубокое разочарование. Многие пытались создать методы, призванные 
обойти это ограничение, прибегая к отражению (см. главу 23), примитивному 
типу 
dynamic
(см. главу 5), перегрузке операторов и т. п. Однако все эти решения 
сильно снижают производительность или ухудшают читабельность кода. Остается 
надеяться, что в следующих версиях CLR и компиляторов компания Microsoft 
устранит этот недостаток.



Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   236   237   238   239   240   241   242   243   ...   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