異なるクラスのインスタンスのアクセス同じ名前のクラスメンバ
質問
私は、クラス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();
所属していません StackOverflow