Відповіді:
Це оператор перетворення . Це означає, що ви можете написати цей код:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
І компілятор не буде скаржитися! Під час виконання буде виконуватися оператор перетворення - передача myBase
в якості аргументу та повернення дійсного XElement
як результат.
Ви, як розробник, можете сказати компілятору:
"Хоча вони виглядають як два абсолютно неспоріднених типу, насправді існує спосіб перетворення від одного до іншого; просто дозвольте мені обробити логіку, як це зробити."
Такий мається на увазі оператор означає , що ви можете перетворити XmlBase
в XElement
неявному вигляді .
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
У запитанні сказано static
, що це повинно бути статичним? Не може це бути нестатично, тому воно може бути примірником?
Ще одне цікаве використання - це те, що Unity зробив, щоб перевірити, чи об’єкт (а отже, екземпляр MonoBehavior) недійсний):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Зауважте, що код повинен бути всередині класу (у цьому випадку CustomClass). Таким чином ви можете зробити щось подібне:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Очевидно, найвідомішим використанням може бути його використання для перетворення одного з ваших класів в інший. Але використання їх з базовими типами також варто врахувати ... і я бачу це згадування досить рідко.
static implicit operator bool
метод повинен бути оголошений всерединіCustomClass
. Я створив для нього DotNetFiddle для демонстраційних цілей.
Це неявний оператор перетворення (на відміну від явного оператора, який вимагає (type)
синтаксису перетворення)