私は最近このコードを見つけました:
public static implicit operator XElement(XmlBase xmlBase)
{
return xmlBase.Xml;
}
static implicit operator
意味?
これは、 変換演算子 です。これは、次のコードを記述できることを意味します。
XmlBase myBase = new XmlBase();
XElement myElement = myBase;
そして、コンパイラは文句を言いません!実行時に、変換演算子が実行されます。引数としてmyBase
を渡し、結果として有効なXElement
を返します。
開発者がコンパイラーに伝える方法です。
「これらはまったく関係のない2つのタイプのように見えますが、実際には一方から他方に変換する方法があります。その方法のロジックを処理させてください。」
このような暗黙の演算子は、XmlBase
をXElement
に暗黙的に変換できることを意味します。
XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;
//no explicit convert here like: XElement xelement = (XElement)xmlBase;
別の興味深い使用法は(Unityがオブジェクト(およびMonoBehaviorのインスタンス)がnullであるかどうかを確認するために行いました):
public static implicit operator bool (CustomClass c)
{
if (c == null) return false;
else return true;
}
そうすれば、次のようなことができます。
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
明らかに、最も悪名高い使用法は、それを使用して、あるクラスを別のクラスに変換することです。しかし、それらを基本型で使用することも考慮に値します...そして、私はそれがめったに言及されないのを見ます。
暗黙的な変換演算子です((type)
変換構文を必要とする明示的な演算子とは対照的です)