Большая часть функций класса Nybble не требует особых пояснений. Тем не менее необходимо подчеркнуть ту особую роль, которую операторы преобразования играют в интегрировании класса типа Nybble в систему типов С#. В частности, объект типа Nybble можно свободно комбинировать с данными других типов в арифметических выражениях, поскольку определены преобразования объекта этого типа в тип int и обратно. Рассмотрим для примера следующую строку кода из приведенной выше программы.
t = а * 2 + 3;
В этом выражении переменнаяtи значения2и3относятся к типуint,но в ней присутствует также объект типаNybble.Оба типа оказываются совместимыми благодаря неявному преобразованию типаNybbleв типint.В данном случае остальная часть выражения относится к типуint,поэтому объектапреобразуется в типintс помощью своего метода преобразования.
А благодаря преобразованию типаintв типNybbleзначение типаintможет быть присвоено объекту типаNybble.Например, в следующей строке из приведенной выше программы:
а = 19;
сначала выполняется оператор Преобразования типаintв типNybble.Затем создается новый объект типаNybble,в котором сохраняются 4 младших разряда целого значения 19, а по существу, число 3, поскольку значение 19 превышает диапазон представления чисел для типаNybble.Далее этот объект присваивается переменной экземпляраа.Без операторов преобразования подобные выражения были бы просто недопустимы.
Кроме того, преобразование типаNybbleв типNybbleиспользуется в циклеfor.Без такого преобразования организовать столь простой циклforбыло бы просто невозможно.
ПРИМЕЧАНИЕ
В качестве упражнения попробуйте создать вариант полубайтового типа Nybble, предотвращающий переполнение, если присваиваемое значение оказывается за пределами допустимого диапазона чисел. Для этой цели лучше всего сгенерировать исключение. (Подробнее об исключениях — в главе 13.)
ГЛАВА 10 Индексаторы и свойства
В этой главе рассматриваются две особые и тесно связанные друг с другом разновидности членов класса: индексаторы и свойства. Каждый из них по-своему расширяет возможности класса, способствуя более полной его интеграции в систему типов C# и повышая его гибкость.
В частности, индексаторы предоставляют механизм для индексирования объектов подобно массивам, а свойства — рациональный способ управления доступом к данным экземпляра класса. Эти члены класса тесно связаны друг с другом, поскольку оба опираются на еще одно доступное в C# средство: аксессор.
Индексаторы