Operador implícito estático
-
28-09-2019 - |
Pergunta
Recentemente, encontrei este código:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
O que static implicit operator
significa?
Solução
Isto é um Operador de conversão. Isso significa que você pode escrever este código:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
E o compilador não reclamará! Em tempo de execução, o operador de conversão será executado - passando myBase
como argumento, e retornando um válido XElement
como resultado.
É uma maneira de você como desenvolvedor dizer ao compilador:
"Embora eles pareçam dois tipos totalmente não relacionados, há realmente uma maneira de converter de um para o outro; apenas deixe -me lidar com a lógica de como fazê -lo".
Outras dicas
Um operador tão implícito significa que você pode converter XmlBase
para XElement
implicitamente.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
It's an implicit conversion operator (as opposed to an Explicit operator, which requires the (type)
conversion syntax)
Outro uso interessante é (o que a unidade fez para verificar se um objeto (e, portanto, uma instância de monobehavior) é nulo):
public static implicit operator bool (CustomClass c)
{
if (c == null) return false;
else return true;
}
Dessa forma, você pode fazer algo assim:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
Obviamente, o uso mais notório pode ser usá -lo para converter uma de suas classes em outra de suas classes. Mas usá -los com tipos básicos também vale uma consideração ... e eu vejo isso mencionado raramente.