сначала выполняется оператор преобразования типа int в тип Nybble. Затем созда ется новый объект типа Nybble, в котором сохраняются 4 младших разряда целого значения 19, а по существу, число 3, поскольку значение 19 превышает диапазон пред ставления чисел для типа Nybble. Далее этот объект присваивается переменной эк земпляра а. Без операторов преобразования подобные выражения были бы просто недопустимы.
Кроме того, преобразование типа Nybble в тип Nybble используется в цикле for. Без такого преобразования организовать столь простой цикл for было бы просто не возможно.
ПРИМЕЧАНИЕ В качестве упражнения попробуйте создать вариант полубайтового типа Nybble, предотвращающий переполнение, если присваиваемое значение оказывается за пределами допустимого диапазона чисел. Для этой цели лучше всего сгенерировать исключение. (Подробнее об исключениях — в главе 13.)
ГЛАВА 10. Индексаторы и свойства
В этой главе рассматриваются две особые и тесно свя занные друг с другом разновидности членов класса: индексаторы и свойства. Каждый из них по-своему расширяет возможности класса, способствуя более полной его интеграции в систему типов С# и повышая его гибкость. В частности, индексаторы предоставляют механизм для ин дексирования объектов подобно массивам, а свойства — ра циональный способ управления доступом к данным экзем пляра класса. Эти члены класса тесно связаны друг с дру гом, поскольку оба опираются на еще одно доступное в C# средство: аксессор. Индексаторы
Как вам должно быть уже известно, индексирование массива осуществляется с помощью оператора []. Для создаваемых классов можно определить оператор [], но с этой целью вместо операторного метода создается индексатор, который позволяет индексировать объект, по добно массиву. Индексаторы применяются, главным об разом, в качестве средства, поддерживающего создание специализированных массивов, на которые накладывается одно или несколько ограничений. Тем не менее индексато ры могут служить практически любым целям, для которых выгодным оказывается такой же синтаксис, как и у масси вов. Индексаторы могут быть одно- или многомерными. Рассмотрим сначала одномерные индексаторы. Создание одномерных индексаторов
Ниже приведена общая форма одномерного индексатора: тип_элемента this[int индекс] { // Аксессор для получения данных. get { // Возврат значения, которое определяет индекс. } // Аксессор для установки данных. set { // Установка значения, которое определяет индекс. } }
где тип
В теле индексатора определены два аксессора (т.е. средства доступа к данным): get и set. Аксессор подобен методу, за исключением того, что в нем не объявляется тип возвращаемого значения или параметры. Аксессоры вызываются автоматически при использовании индексатора, и оба получают индекс в качестве параметра. Так, если индексатор указывается в левой части оператора присваивания, то вызывается аксессор set и устанавливается элемент, на который указывает параметр индекс. В противном случае вызывается аксессор get и возвращается значение, соответствующее параметру индекс. Кроме того, аксессор set получает неявный параметр value, содержащий значение, присваиваемое по указанному индексу.