/// </summary>

 /// <param name='w1'></param>

 /// <param name='w2'></param>

 /// <returns></returns>

 public static Wheels operator + (Wheels w1, Wheels w2) {

  w1.wheel += w2.wheel; return w1;

 }

 /// <summary>

 /// предоставляет альтернативную функциональность сложения.

 /// отметим, что вторая альтернатива операции сложения

 /// находится не в этой структуре, а в классе car

 /// </summary>

 /// <param name= 'w'></param>

 /// <returns></returns>

 public Wheels AddWeels(Wheels w) {

  this.wheel += w.wheel;

  return this;

 }

 /// <summary>

 /// поэтому целые литералы можно неявно преобразовать в wheel

 /// </summary>

 /// <param name='x'></param>

 /// <returns></returns>

 public static implicit operator Wheels(int x) {

  return new Wheels(x);

 }

}

Здесь выделим использование метода 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;

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ОБРАНЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату