異なるクラスのインスタンスのアクセス同じ名前のクラスメンバ

StackOverflow https://stackoverflow.com/questions/1845592

  •  12-09-2019
  •  | 
  •  

質問

私は、クラスAとBのインスタンスを持っている、との両方のクラスはメンバー「テキスト」を実装します。一般的な方法でメンバーのテキストにアクセスする方法はありますか?

:私は単に言うのjavascriptの方法に類似した何かを望んでいます
instance['Text'] = value;

注:これら2つのクラスが、残念ながら、両方のテキスト部材と同じインターフェイスを実装していない

役に立ちましたか?

解決

javascriptのとは異なり、C#が静的な言語であり、両方のクラスは、共通のインターフェイスまたは基本クラスを実装していない場合は、同じ目標を達成するためにリフレクションを使用することができます。

instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);

他のヒント

あなたはAとBが同じインターフェイスを実装して作ることができない場合は、あなたが<使用する必要があるのhref = "http://msdn.microsoft.com/en-us/library/f7ykdhsy%28VS.71%29 .aspxの」REL = "nofollowをnoreferrer">名前で任意のクラスメンバにアクセスするための反射に、このような何かます:

typeof(A).GetProperty("Text").GetValue(theInstance, null);

ここでtheInstanceは、Aクラスのインスタンスになります。

理想的には、おそらくそれはとても便利ではありませんAとBのためのベースになりますメンバー「テキスト」を持つ単一のクラスを持っている必要がありますが、より確実かつ正確です。 あなたが他の方法で同じことを行うことができますリフレクションを使用しないようにしてみます。

あなたがAを作ることができるとBが同じインターフェイスを実装する場合、

 interface ISomeGenericNameForAAndB
{
    string Text { get; }
}
class A :ISomeGenericNameForAAndB
{
    public string Text { get { return "some Text from A"; } }    
}
class B : ISomeGenericNameForAAndB
{
    public string Text { get { return "some Text from B"; } }
}

ISomeGenericNameForAAndB anAInstance = new A();
ISomeGenericNameForAAndB aBInstance = new B();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top