Въведение в претоварването на оператора в C # - Всичко за ИТ и програмиране

Написано на 07 април 2012. Публикувано в C # .NET

Претоварването на оператора е мощна и недостатъчно използвана (но често неправилно използвана) функция, която може да направи вашия код по-опростен и използването на обекти по-интуитивно. Добавянето на няколко прости претоварени оператора към клас или структура ще ви даде възможност да:

  1. извършвайте преобразувания към/от вашия тип (и) към други типове
  2. изпълнявайте математически/логически операции върху вашия тип и върху себе си или върху други типове

Има няколко начина за преобразуване между типовете, но сред тях най-често се използва използването на имплицитни/явни оператори за преобразуване.

Неявното преобразуване означава, че можете директно да присвоите екземпляр от един тип на друг.

Да вземем пример.

За да конвертирате изрично структура обратно в int, трябва да добавите друг оператор за преобразуване:

Сега можете да присвоите myIntStructInstance директно на int (тип цели числа).

Можете също така да извикате всяка друга функция, която приема int и да му предадете директно екземпляр на структурата. Това може да се направи с произволен брой видове.

Структурата може да има и поле на низ, като в този случай би било полезно да може да го създаде чрез директно присвояване на низ. Тази структура може да изглежда така:

. и екземпляр struct може да бъде създаден чрез присвояване на стойност от тип int както преди или чрез присвояване на низ.

Моля, обърнете внимание, че операторът за неявно преобразуване от нашата структура в низ не е създаден. В някои ситуации това може да създаде неяснота, с която компилаторът не може да се справи. За да видите това, добавете следните редове код:

Този код се компилира без проблем. Сега опитайте този код:

Компилаторът ще даде следната грешка: "Несигурност при извикването между следните методи или свойства." Конзолата успешно ще приема int или низ (и много други типове, разбира се), така че може ли да се очаква конзолата да знае какво да използва? Решението е да се използва експлицитният оператор за преобразуване.

Такова преобразуване означава, че в кода трябва да се извърши изрично кастиране. Заменете неявната ключова дума с експлицитна в последния оператор за преобразуване, така че да изглежда така.

Сега можете да върнете стойност на низ, но само в случай на изрично преобразуване на тип в низ.

Получаваме очаквания резултат.

неявният е много по-удобен от изричния, тъй като не е необходимо да конвертирате изрично типове в кода, но както можете да видите по-рано, това може да причини проблеми. Има и други неща, които трябва да се вземат предвид: ако обектите, предавани в която и да е посока, са закръглени или отсечени по един или друг начин, тогава трябва да се използва изрична трансформация, така че лицето, което използва вашия обект, да не бъде уловено от факта, че данните се изхвърлят.