Réponses:
Ceci est un opérateur de conversion . Cela signifie que vous pouvez écrire ce code:
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
Et le compilateur ne se plaindra pas! Au moment de l'exécution, l'opérateur de conversion sera exécuté - en passant myBase
comme argument et en retournant un valide XElement
comme résultat.
C'est un moyen pour vous en tant que développeur de dire au compilateur:
"même si ceux-ci ressemblent à deux types totalement indépendants, il existe en fait un moyen de passer de l'un à l'autre; laissez-moi simplement gérer la logique de la façon de le faire."
Un tel opérateur implicite signifie que vous pouvez convertir XmlBase
en XElement
implicitement.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
XElement xelement = (XElement)xmlBase;
Dans la question qu'il dit static
, qu'est-ce que cela doit être statique? Ne peut-il pas être non statique, donc il peut être instancié?
Une autre utilisation intéressante est (qu'Unity a fait pour vérifier si un objet (et donc une instance de MonoBehavior) est nul):
public static implicit operator bool (CustomClass c)
{
return c != null;
}
Notez que le code doit être à l'intérieur de la classe (CustomClass dans ce cas). De cette façon, vous pouvez faire quelque chose comme ceci:
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
De toute évidence, l'utilisation la plus notoire pourrait être de l'utiliser pour convertir une de vos classes en une autre de vos classes. Mais les utiliser avec des types de base vaut également la peine d'être pris en compte ... et je le vois rarement mentionné.
static implicit operator bool
méthode doit être déclarée dans le fichierCustomClass
. J'ai créé un DotNetFiddle pour cela à des fins de démonstration.
C'est un opérateur de conversion implicite (par opposition à un opérateur Explicit, qui nécessite la (type)
syntaxe de conversion)