オブジェクト参照を使用するときに、そのプロパティの1つに(デフォルトのプロパティとして)アクセスしたい。出来ますか?

a.toraby

私はこのクラスを持っています:

    public class NodeData<T>
    {
        public string Name;
        public T Value;
        public NodeData(string name, T value){
             this.Name = name;
             this.Value = value;
        }
    }
    NodeData data = new NodeData<int>("test",111);

data代わりにを使用してこのオブジェクトの値にアクセスするにはどうすればよいですか?data.Value

私はによって意味var a = data;int型111ないNODEDATAオブジェクトでなければなりません。出来ますか?したがって、私のオブジェクトの使用法ははるかに簡単です。

Jeppe Stig Nielsen

クラス内に演算子を含めることができます。

public static implicit operator T(NodeData<T> data)
{
  return data.Value;
}

使用法:

var data = new NodeData<int>("test", 111);
int a = data; // OK

宣言varでは機能しませんa


あなたがそれを編集する前に、私はあなたの質問を読みました。メソッドが次のようにオーバーロードされているとします。

void WriteLine(object o);
void WriteLine(int i);

次に、data同じように、呼び出し:

WriteLine(data)

次のように解決されます(簡略化):最初のオーバーロードは、からNodeData<>派生するため、単純な参照変換によって適用できobjectます。また、2番目のオーバーロードは、ユーザー定義のimplicit変換演算子でも適用できます両方の過負荷が適用されるため、2つのうちの「より良い」ものを見つけるようにする必要があります。intので、バージョンが優れているintに暗黙的に変換されobjectながら(ボクシング変換によって)objectに暗黙的に変換できませんint(いないすべてのオブジェクトが整数です)。

したがって、最終的にはint、バインディング時にオーバーロードが選択されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ