質問

私は最近このコードを見つけました:

 public static implicit operator XElement(XmlBase xmlBase)
 {
     return xmlBase.Xml;
 }

何をしますか static implicit operator 平均?

役に立ちましたか?

解決

これは 変換オペレーター. 。これは、このコードを書くことができることを意味します。

XmlBase myBase = new XmlBase();
XElement myElement = myBase;

そして、コンパイラは文句を言いません!実行時に、コンバージョンオペレーターが実行されます - 合格します myBase 議論として、そして有効なものを返します XElement 結果として。

開発者としてコンパイラに伝える方法です。

「これらは完全に無関係な2つのタイプのように見えますが、実際には一方から他方に変換する方法があります。それを行う方法のロジックを処理させてください。」

他のヒント

このような暗黙の演算子は、変換できることを意味します XmlBaseXElement 暗黙的に。

XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;   
//no explicit convert here like: XElement xelement = (XElement)xmlBase;

それは暗黙の変換演算子です(明示的な演算子とは対照的に、 (type) 変換構文)

別の興味深い使用法は、オブジェクト(したがってモノベハビオールのインスタンス)がnullであるかどうかを確認するためにUnityが行ったことです):

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
    }
}

明らかに、最も悪名高い使用は、それを使用してクラスの1つを別のクラスに変換することです。しかし、基本的なタイプでそれらを使用することも検討する価値があります...そして、私はそれがまれに言及されていないことがわかります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top