opérateur implicite statique
-
28-09-2019 - |
Question
J'ai récemment trouvé ce code:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
Que signifie de static implicit operator
?
La solution
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! Lors de l'exécution, l'opérateur de conversion sera exécutée - en passant myBase
en tant qu'argument, et en retournant une XElement
valide le résultat
Il est une façon pour vous en tant que développeur pour indiquer au compilateur:
«même si ceux-ci ressemblent à deux types tout à fait sans rapport, il est en fait un moyen de convertir de l'un à l'autre. Me laisser Manipulez le logique de la façon de le faire »
Autres conseils
Un tel moyen de l'opérateur implicite, vous pouvez convertir XmlBase
à XElement
implicitement.
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
Il est un opérateur de conversion implicite (par opposition à un opérateur explicite, ce qui nécessite la syntaxe de conversion de (type)
)
Une autre utilisation intéressante est (ce qui fait l'unité pour vérifier si un objet (et donc une instance de MonoBehavior) est nulle):
public static implicit operator bool (CustomClass c)
{
if (c == null) return false;
else return true;
}
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
}
}
Il est évident que le plus célèbre usage pourrait être l'utiliser pour convertir un de vos cours à l'autre de vos classes. Mais les utiliser avec les types de base est la valeur d'une considération aussi bien ... et je le vois très rarement mentionné.