Ватсон Карли
Шрифт:
}
}
Здесь выделим использование метода
AddWheel
, что удовлетворяет рекомендациям об альтернативных сигнатурах. Язык CLS, который не поддерживает перезагрузку операторов, может получить доступ к той же функциональности сложения с помощью этого метода. Фрагмент кода ниже показывает, как может использоваться этот тип данных значения: public static void Main(String[] args) {
Wheels front = 2; // неявное преобразование
Wheels back = 4; // неявное преобразование
Wheels total = front + back; // перезагруженная версия сложения
Console.WriteLine(total);
}
Компиляция и выполнение этого кода дадут в результате 6. Можно также изменить тип
Car
, чтобы разрешить сложение и вычитание из него Wheels
. Следующий код показывает изменения, сделанные в классе Car
: public class Car {
int wheels, doors, headlights;
public Car(int wheels, int doors, int headlights) {
this.wheels = wheels;
this.doors = doors;
this.headlights = headlights;
}
public Car AddWheel(Two.Wheels w) {
this.wheels += w.Number;
return this;
}
internal int Wheels {
set {
wheels = value;
}
get {
return wheels;
}
}
/// <summary>
/// выполняет операцию сложения на Wheel и Car
/// </summary>
/// <param name="c1">car</param>
/// <param name="w1">wheel</param>
/// <returns></returns>
public static Car operator +(Car c1, Wheels w1) {
c1.Wheels += w1.Number;
return c1;
}
/// <summary>
/// выполняет операцию вычитания на Wheel и Car
/// </summary>
/// <param name="c1">car</param>
/// <param name="w1">wheel</param>
/// <returns></returns>
public static Car operator -(Car c1, Wheels w1) {
c1.Wheels -= w1.Number;
return c1;
}
public override string ToString {
return
"[wheels = " + wheels + "| doors = " + doors + "|"
+ " headlights = " + headlights + "]";
}
}
В класс
Car
также был добавлен метод AddWheel
. Представленный далее фрагмент кода проверяет функциональность, только что добавленную в Car
: public static void Main(String[] args) {
Wheels front = 2;
Wheels back = 4;
Wheels total = front + back;
Car greenFordExpedition = new Car(0, 4, 2);
Console.WriteLine("initial:\t" + greenFordExpedition);
greenFordExpedition += total;
Console.WriteLine("after add:\t" + greenFordExpedition);
greenFordExpedition -= front;
Console.WriteLine("after subtract:\t" + greenFordExpedition);
}
Компиляция и выполнение этого кода создадут приведенные ниже результаты:
initial: CAR-[wheels = 0| doors = 4| headlights = 2 ]
after add: CAR-[wheels = 6| doors = 4| headlights = 2 ]