Odpowiedzi:
To jest operator konwersji . Oznacza to, że możesz napisać taki kod:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
A kompilator nie będzie narzekał! W czasie wykonywania zostanie wykonany operator konwersji - przekazujący myBasejako argument i zwracający prawidłowy XElementwynik.
Jest to sposób, w jaki programista może powiedzieć kompilatorowi:
„nawet jeśli wyglądają na dwa zupełnie niepowiązane typy, w rzeczywistości istnieje sposób na konwersję z jednego do drugiego; pozwól mi tylko zająć się logiką, jak to zrobić”.
Taki niejawny operator oznacza, że można przekonwertować XmlBasena XElementniejawny.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;W pytaniu, które mówi static, co to musi być statyczne? Czy nie może być statyczny, więc można go utworzyć?
Innym interesującym zastosowaniem jest (które Unity zrobiło, aby sprawdzić, czy obiekt (a tym samym instancja MonoBehavior) jest null):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Zwróć uwagę, że kod musi znajdować się wewnątrz klasy (w tym przypadku CustomClass). W ten sposób możesz zrobić coś takiego:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Oczywiście najbardziej znanym zastosowaniem może być użycie go do konwersji jednej z twoich klas na inną. Ale używanie ich z podstawowymi typami również jest warte rozważenia ... i rzadko o tym wspominam.
static implicit operator boolmetoda musi być zadeklarowane wewnątrzCustomClass . Stworzyłem dla niego DotNetFiddle do celów demonstracyjnych.
Jest to niejawny operator konwersji (w przeciwieństwie do operatora jawnego, który wymaga (type)składni konwersji)