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 myBase
jako argument i zwracający prawidłowy XElement
wynik.
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ć XmlBase
na XElement
niejawny.
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 bool
metoda 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)