Ниже полностью приводится класс Nybble, а также класс NybbleDemo, демонстрирующий его применение.
// Создать полубайтовый тип 4-разрядных данных под названием Nybble.
Using System;
// тип4-разрядных данных.
class Nybble {
int val; // базовый тип для хранения данных
public Nybble() { val =0; }
public Nybble(int i) { val = i;
val = val & OxF; // сохранить 4 младших разряда } •
// Перегрузить бинарный оператор + для сложения двух объектов типа Nybble, public static Nybble operator +(Nybble opl, Nybble op2)
{
Nybble result = new Nybble (); result.val = opl.val + op2.val;
result.val = result.val & OxF; // сохранить 4 младших разряда return result;
}
// Перегрузить бинарный оператор + для сложения
// объекта типа Nybble и значения типа int.
public static Nybble operator + (Nybble opl, int op2)
{
Nybble result = new Nybble (); result.val = opl.val + op2;
result.val = result.val & OxF; // сохранить 4 младших разряда return result;
}
// Перегрузить бинарный оператор + для сложения // значения типа int и объекта типа Nybble, public static Nybble operator +(int opl, Nybble op2)
{
Nybble result = new Nybble();
result.val = opl + op2.val;
result.val = result.val & OxF; // сохранить 4 младших разряда return result;
}
// Перегрузить оператор ++.
public static Nybble operator ++(Nybble op)
{
Nybble result = new Nybble(); result.val = op.val + 1;
result.val = result.val & OxF; // сохранить 4 младших разряда return result;
}
// Перегрузить оператор >.
public static bool operator >(Nybble opl, Nybble op2)
{
if(opl.val > op2.val) return true; else return false;
}
// Перегрузить оператор <.
public static bool operator <(Nybble opl, Nybble op2)
{
if(opl.val < op2.val) return true; else return false;
}
// Преобразовать тип Nybble в тип int. public static implicit operator int (Nybble op)
{
Return op.val;
}
// Преобразовать тип int в тип Nybble, public static implicit operator Nybble (int op)
{
Return new Nybble(op);
}
}
class NybbleDemo { static void Main() {
Nybble a = new Nybble(1);
Nybble b = new Nybble(10);
Nybble с = new Nybble(); int t;
Console.WriteLine("a: " + (int) a); Console.WriteLine("b: " + (int) b);
if(а < b) Console.WriteLine("а меньше Ь\п");
// Сложить два объекта типа Nybble, с = а + b;
Console.WriteLine("с после операции с = а + b: " + (int) с);
// Сложить значение типа int с объектом типа Nybble, а += 5;
Console.WriteLine("а после операции а += 5: " + (int) а);
Console.WriteLine() ;
// Использовать тип Nybble в выражении типа int. t = а * 2 + 3;
Console.WriteLine("Результат вычисления выражения а * 2 + 3: " + t); Console.WriteLine();
// Продемонстрировать присваивание значения типа int и переполнение, а = 19;
Console.WriteLine("Результат присваивания а = 19: " + (int) а);
Console.WriteLine() ;
// Использовать тип Nybble для управления циклом.
Console.WriteLine("Управление циклом for " +
"с помощью объекта типа Nybble."); for(а =0; а < 10; а++)
Console.Write((int) а + " ");
Console.WriteLine();
}
}
При выполнении этой программы получается следующий результат.
а: 1 Ь: 10
А меньше b
с после операции с = а + Ь: 11 а после операции а += 5: 6
Результат вычисления выражения а * 2 + 3: 15 Результат присваивания а = 19: 3
Управление циклом for с помощью объекта типа Nybble.
Большая часть функций класса 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. Далее этот объект присваивается переменной экземпляра а. Без операторов преобразования подобные выражения были бы просто недопустимы.