Отсутствие поддержки ограничений при использовании операций

Отсутствие поддержки ограничений при использовании операций

При создании обобщенных методов для вас может оказаться сюрпризом появление ошибок компилятора, когда с параметрами типа используются операции C# (+, -, *, == и т.д.). Например, я уверен, вы сочли бы полезными классы Add(), Subtract(), Multiply() и Divide(), способные работать с обобщенными типами.

// Ошибка компиляции!

// Нельзя применять операции к параметрам типа!

public class BasicMath‹T› {

 public T Add(T arg1, T arg2) { return arg1 + arg2; }

 public T Subtract(T arg1, T arg2) { return arg1 – arg2; }

 public T Multiply(T arg1, T arg2) { return arg1 * arg2; }

 public T Divide(T arg1, T arg2) { return arg1 / arg2; }

}

Как ни печально, этот класс BasicMath‹T› не компилируется. Это может показаться большим ограничением, но не следует забывать, что обобщения являются обобщениями. Конечно, тип System.Int32 может прекрасно работать с бинарными операциями C#. Однако, если, например, ‹T› будет пользовательским классом иди типом структуры, компилятор не сможет сделать никаких предположений о характере перегруженных операций +, -, * и /. В идеале C# должен был бы позволять обобщенному типу ограничения с использованием операций, например, так.

// Только для иллюстрации!

// Этот программный код не является допустимым в C# 2.0.

public class BasicMath‹T› where T: operator +, operator -, operator *, operator / {

 public T Add(T arg1, T arg2) { return arg1 + arg2; }

 public T Subtract(T arg1, T arg2) { return arg1 – arg2; }

 public T Multiply(T arg1, T arg2) { return arg1 * arg2; }

  public T Divide(T arg1, T arg2) { return arg1 / arg2; }

}

Увы, ограничения обобщенных типов при использовании операций в C# 2005 не поддерживаются.

Исходный код. Проект CustomGenericCollection размещен в подкаталоге, соответствующем главе 10.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Проблемы при использовании

Из книги Разгони свой сайт автора Мациевский Николай

Проблемы при использовании Даже если положиться на то, что спрайты поддерживаются (почти) всеми браузерами на данный момент, все равно остается достаточно много вопросов, которые они не только не решают, а скорее сами создают. Во-первых, это проблемы при использовании


Отсутствие комплексного подхода

Из книги Продвижение бизнеса в Интернет. Все о PR и рекламе в сети автора Гуров Филипп

Отсутствие комплексного подхода Когда клиент прибегает к услугам нескольких подрядчиков или же взаимодействие между клиентом и подрядчиком налажено недостаточно хорошо, могут возникнуть серьезные проблемы. Незначительные на первый взгляд факторы могут поставить под


Простота в использовании

Из книги Skype: бесплатные звонки через Интернет. Начали! автора Гольцман Виктор Иосифович

Простота в использовании После правильной установки и настройки пользоваться системой VoIP-телефонии не сложнее, чем обычным телефоном. Принцип все тот же: вы снимаете трубку, ждете гудка, набираете номер, а когда собеседник отвечает, начинаете разговор. Конечно, если


Отсутствие единого стандарта

Из книги Основы AS/400 автора Солтис Фрэнк

Отсутствие единого стандарта Еще один существенный недостаток заключается в том, что в мире VoIP до сих пор нет единых стандартов. Связисты Международного телекоммуникационного союза (International Telecommunication Union, или ITU) продвигают стандарт Н.323, компьютерщики же придумали


Отсутствие защиты (уровень 10)

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Отсутствие защиты (уровень 10) Уровень 10 означает самую низкую степень защищенности — отсутствие таковой. Для доступа к системе не требуется пароля и любому пользователю разрешен доступ ко всем системным ресурсам и объектам без ограничений. Единственное условие —


6.16.8 Конец списка вариантов и отсутствие операций

Из книги Технология XSLT автора Валиков Алексей Николаевич

6.16.8 Конец списка вариантов и отсутствие операций Вариант "без операций" (No Operation) применяется для заполнения промежутков между вариантами датаграмм. Например, он используется для выравнивания следующего варианта по 16- или 32-разрядной границе.Конец списка вариантов (End of


8.9.11 Отсутствие аутентификации

Из книги Инфобизнес на полную мощность [Удвоение продаж] автора Парабеллум Андрей Алексеевич

8.9.11 Отсутствие аутентификации Еще одним неприятным свойством версии 1 является отсутствие аутентификации для сообщений RIP. Если некто получил доступ к сети и сформировал сообщение с заведомо ложной информацией (фальсифицировав адрес источника), то это может сделать


Отсутствие "побочных" эффектов

Из книги Создаем вирус и антивирус автора Гульев Игорь А.

Отсутствие "побочных" эффектов Одним из краеугольных принципов XSLT, с которым, увы, нелегко смириться разработчику, работавшему только с процедурными языками, — это отсутствие "побочных" эффектов. Под побочными эффектами в данном случае понимаются изменения в окружении


Отсутствие result tree fragment

Из книги Антимозг [Цифровые технологии и мозг] автора Шпитцер Манфред

Отсутствие result tree fragment Главное и наиболее существенное отличие XSLT 1.1 от XSLT 1.0 состоит в том, что тип данных, известный в XSLT 1.0 как result tree fragment (результирующий фрагмент дерева) в XSLT 1.1. отсутствует. Вместо него в версии 1.1 используется множество узлов, состоящее из


Проверка на отсутствие АОН

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Проверка на отсутствие АОН Прежде чем получать адрес и звонить на BBS, нужно убедиться (например, путем звонка с сотового телефона, с телефона-двойника типа Panasonic, с таксофона или с телефона, который гарантированно не определяется системой АОН), что на данном узле


Стресс — это отсутствие самоконтроля

Из книги Разработка ядра Linux автора Лав Роберт

Стресс — это отсутствие самоконтроля Некоторых удивит факт, что существует четкая взаимосвязь между стрессом и самоконтролем. Обычно мы говорим: «Ну что за стресс!», если эскалатор сломан, нам пришлось подняться на пятый этаж по лестнице, утирая пот со лба. На самом деле с


Проблема четвертая – отсутствие развития

Из книги автора

Проблема четвертая – отсутствие развития При всем многообразии мнений и школ графологическая база знаний, сформированная к середине XX века, остается без изменений. Она статична, не развивается дальше. Не анализируются новые характеристики почерка, а также новые


8.13. Отсутствие управления потоком в UDP

Из книги автора

8.13. Отсутствие управления потоком в UDP Теперь мы проверим, как влияет на работу приложения отсутствие какого-либо управления потоком в UDP. Сначала мы изменим нашу функцию dg_cli так, чтобы она отправляла фиксированное число дейтаграмм. Она больше не будет читать из


Отсутствие библиотеки libc

Из книги автора

Отсутствие библиотеки libc В отличие от обычных пользовательских приложений, ядро не компонуется со стандартной библиотекой функций языка С (и ни с какой другой библиотекой такого же типа). Для этого есть несколько причин, включая некоторые ситуации с дилеммой о курице и


Отсутствие защиты памяти

Из книги автора

Отсутствие защиты памяти Когда прикладная программа предпринимает незаконную попытку обращения к памяти, ядро может перехватить эту ошибку и аварийно завершить соответствующий процесс. Если ядро предпринимает попытку некорректного обращения к памяти, то результаты