И последнее замечание: несмотря на то, что оператор индексации массива [ ] нельзя перегружать с помощью операторного метода, имеется возможность создать индексаторы, о которых речь пойдет в следующей главе.
Еще один пример перегрузки операторов
Во всех предыдущих примерах программ, представленных в этой главе, для демонстрации перегрузки операторов использовался классThreeD,и этой цели он служил исправно. Но прежде чем завершить эту главу, было бы уместно рассмотреть еще один пример перегрузки операторов. Общие принципы перегрузки операторов остаются неизменными независимо от применяемого класса, тем не менее, в рассматриваемом ниже примере наглядно демонстрируются сильные стороны такой перегрузки, особенно если это касается расширяемости типов.
В данном примере разрабатывается 4-разрядный целочисленный тип данных и для него определяется ряд операций. Вам, вероятно, известно, что на ранней стадии развития вычислительной техники широко применялся тип данных для обозначения 4-разрядных двоичных величин, называвшихся
В приведенном ниже примере программы тип полубайтовых данных реализуется с помощью классаNybble.В качестве базового для него используется типint,но с ограничением на хранение данных от 0 до 15. В классеNybbleопределяются следующие операторы.
• Сложение двух объектов типаNybble.
• Сложение значения типа int с объектом типа Nybble.
• Сложение объекта типаNybbleсо значением типаint.
• Операции сравнения: больше (>) и меньше (<).
• Операция инкремента.
• Преобразование значения типаintв объект типаNybble.
• Преобразование объекта типаNybbleв значение типаint.
Перечисленных выше операций достаточно, чтобы показать, каким образом тип классаNybbleинтегрируется в систему типов С#. Но для полноценной реализации этого типа данных придется определить все остальные доступные для него операции. Попробуйте сделать это сами в качестве упражнения.
Ниже полностью приводится классNybble,а также классNybbleDemo,демонстрирующий его применение.
// Создать полубайтовый тип 4-разрядных данных под названием Nybble.
using System;
// тип4-разрядных данных.
class Nybble {