Ниже полностью приводится класс 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. Далее этот объект присваивается переменной экземпляра а. Без операторов преобразования подобные выражения были бы просто недопустимы.

Наши рекомендации