result.val = result.val & 0xF; // сохранить 4 младших разряда
return result;
}
// Перегрузить оператор >.
public static bool operator >(Nybble op1, Nybble op2) {
if (op1.val > op2.val) return true;
else return false;
}
// Перегрузить оператор <.
public static bool operator <(Nybble op1, Nybble op2) {
if (op1.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 (a < b) Console.WriteLine("а меньше b");
// Сложить два объекта типа Nybble.
с = a + b;
Console.WriteLine("с после операции с = а + b: " + (int)с);
// Сложить значение типа int с объектом типа Nybble,
a += 5;
Console.WriteLine("а после операции а += 5: " + (int)a);
Console.WriteLine();
// Использовать тип Nybble в выражении типа int.
t = a * 2 + 3;
Console.WriteLine("Результат вычисления выражения а * 2 + 3: " + t);
Console.WriteLine();
// Продемонстрировать присваивание значения типа int и переполнение,
a = 19;
Console.WriteLine("Результат присваивания а = 19: " + (int)a);
Console.WriteLine();
// Использовать тип Nybble для управления циклом.
Console.WriteLine("Управление циклом for " +
"с помощью объекта типа Nybble.");
for (a = 0; a < 10; a++)
Console.Write((int)a + " ");
Console.WriteLine();
}
}
При выполнении этой программы получается следующий результат.
а: 1
b: 10
а меньше b
с после операции с = а + b: 11
а после операции а += 5: 6
Результат вычисления выражения а * 2 + 3: 15
Результат присваивания а = 19: 3
Управление циклом for с помощью объекта типа Nybble.
0123456789
Большая часть функций класса Nybble
не требует особых пояснений. Тем не менее необходимо подчеркнуть ту особую роль, которую операторы преобразования играют в интегрировании класса типа Nybble
в систему типов С#. В частности, объект типа Nybble
можно свободно комбинировать с данными других типов в арифметических выражениях, поскольку определены преобразования объекта этого типа в тип int и обратно. Рассмотрим для примера следующую строку кода из приведенной выше программы.
t = а * 2 + 3;
В этом выражении переменная t и значения 2 и 3 относятся к типу int
, но в ней присутствует также объект типа Nybble
. Оба типа оказываются совместимыми благодаря неявному преобразованию типа Nybble
в тип int
. В данном случае остальная часть выражения относится к типу int
, поэтому объект а преобразуется в тип int
с помощью своего метода преобразования.
А благодаря преобразованию типа int
в тип Nybble
значение типа int
может быть присвоено объекту типа Nybble
. Например, в следующей строке из приведенной выше программы:
а = 19;