私はこのクラスを持っています:
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オブジェクトでなければなりません。出来ますか?したがって、私のオブジェクトの使用法ははるかに簡単です。
クラス内に演算子を含めることができます。
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]
コメントを追加