J'ai récemment trouvé ce code:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Que veut static implicit operator
dire?
J'ai récemment trouvé ce code:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Que veut static implicit operator
dire?
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
enXElement
implicitement.la source
XElement xelement = (XElement)xmlBase;
Dans la question qu'il ditstatic
, 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):
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:
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é.
la source
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)la source