}

 public static explicit operator(Car car) {

  Man man = new Man();

  man.Arms = car.doors;

  man.Legs = car.wheels;

  man.Name = 'john';

  return man;

 }

}

Мы добавим также переопределенные версии для методов ToString() обоих классов, чтобы вывести содержимое объекта Car. Это делается так:

// для Man.cs

public override string ToString() {

 return '[arms:' + arms + '|legs:' + legs + '|name:' + name + ']';

}

// для Car.cs

public override string ToString() {

 return '[wheels:' + wheels + '|doors:' + doors + '|headlights:' + headlights + ']';

}

Листинг кода ниже показывает использование специального преобразования:

// BoxEx.cs

public class OverflowEX {

 public static void Main(String[] args) {

  Car car = new Car (4, 5, 2);

  Man man = (Man) car; // использует явное специальное преобразование

  Console.WriteLine('Man - ');

  Console.WriteLine(man);

  Console.WriteLine();

  Car car2 = man; // использует неявное специальное преобразование

  Console.WriteLine('Car - ');

  Console.WriteLine(car2);

 }

}

Компиляция и выполнение этого кода создает показанные ниже результаты:

Man -

[arms:5|legs:4|name:john]

Car -

[wheels:4|doors:5|headlights:2]

Перезагрузка

В начале важно отметить, что перезагрузка операторов не определена в CLS. Однако CLS обращается к ней, потому что языки, обеспечивающие ее функциональность, делают это способом, который могут понять другие языки. Таким образом, языки, которые не поддерживают перезагрузку операторов, все-таки имеют доступ к базовой функциональности. Java является примером языка, который не поддерживает перезагрузку операторов, — ни одна из концепций, рассмотренных в этом разделе, не может ее использовать. Спецификация среды .NET включает ряд рекомендаций для проведения перезагрузки операторов.

□ Определите операторы на типах данных значений, которые логически являются встроенным типом языка (таким, как System.Decimal).

□ Используйте методы перезагрузки операторов, включающие только тот класс, на котором определены методы.

□ Применяйте соглашения об именах и сигнатурах, описанные в CLS.

□ Перезагрузка операторов полезна в случаях, где точно известно, каким будет результат операции.

□ Предоставьте альтернативные сигнатуры. Не все языки поддерживают вызов перезагруженных операторов. Поэтому постарайтесь всегда включать вторичный метод с подходящим специфическим для домена именем, который имеет эквивалентную функциональность.

Перезагрузка операторов связана как с определенными пользователем преобразованиями, так и с типом данных, а не с экземпляром. Это означает, что она связана со всем типом данных, а не с каким-то одним экземпляром объекта, то есть операция всегда должна быть static и public.

В нижеследующем примере создается тип данных значения Wheels, который может выполнять перезагруженное сложение с самим собой. Можно отметить частое использование комментариев и тегов типа XML внутри комментариев, они нужны для документации. Документация C# будет обсуждаться ниже в этом приложении:

public struct Wheels {

 int wheel;

 // загрузить начальное значение в wheel

 private Wheels(int initVal); {

  wheel = initVal;

 }

 /// <summary>

 /// показывает внутреннее число wheels

 /// </summary>

 internal int Number {

  set {

   wheel = value;

  }

  get {

   return wheel;

  }

 }

 /// <summary>

 /// возвращает внутреннее число. Если этот метод

 /// не переопределен, то возвращаемой строкой будет тип Two.Wheels.

 /// </ summary >

 /// <returns></returns>

 public override string ToString() {

  return wheel.ToString();

 }

 /// < summary>

 /// выполнить операцию сложения на двух wheels

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

0

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

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