回答:
これは変換演算子です。それはあなたがこのコードを書くことができることを意味します:
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;
XElement xelement = (XElement)xmlBase;
それが言う質問ではstatic
、それは静的である必要がありますか?非静的ではないので、インスタンス化できますか?
別の興味深い使用法は(Unityがオブジェクト(およびMonoBehaviorのインスタンス)がnullかどうかを確認するために行ったもの)です。
public static implicit operator bool (CustomClass c)
{
return c != null;
}
コードはクラス(この場合はCustomClass)内にある必要があることに注意してください。そうすれば、次のようなことができます。
void Method ()
{
CustomClass c1 = null;
CustomClass c2 = new CustomClass ();
bool b1 = c1; // is false
bool b2 = c2; // is true
if (!c1 && c2)
{
// Do stuff
}
}
明らかに、最も悪名高い使用は、それを使用してクラスの1つを別のクラスに変換することです。しかし、基本型でそれらを使用することも検討に値します。
static implicit operator bool
メソッドが宣言されなければならないの内側CustomClass
。DotNetFiddleを作成しました デモ用にを。
暗黙的な変換演算子です((type)
変換構文を必要とするExplicit演算子とは対照的です)。