Respostas:
Este é 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 vai 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:
"mesmo que pareçam dois tipos totalmente independentes, na verdade existe uma maneira de converter de um para o outro; deixe-me lidar com a lógica de como fazê-lo."
Tal um meio operador implícitas você pode converter XmlBase
para XElement
implicitamente.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
Na pergunta que diz static
, o que tem que ser estático? Não pode ser não estático, para ser instanciado?
Outro uso interessante é (que o Unity fez para verificar se um objeto (e, portanto, uma instância do MonoBehavior) é nulo):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Observe que o código deve estar dentro da classe (CustomClass neste caso). 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. Mas usá-los com tipos básicos também vale a pena considerar ... e vejo isso mencionado muito raramente.
static implicit operator bool
método deve ser declarado dentro do arquivoCustomClass
. Eu criei um DotNetFiddle para ele para fins de demonstração.
É um operador implícito de conversão (em oposição a um operador explícito, que requer a (type)
sintaxe de conversão)