クラス A と B のインスタンスがあり、両方のクラスがメンバー 'Text' を実装しています。一般的な方法でメンバー Text にアクセスする方法はありますか? 私は単純に言うJavaScriptの方法に似た何かを望んでいます:
instance['Text'] = value;
注: 残念ながら、これら 2 つのクラスは両方とも Text メンバーと同じインターフェイスを実装していません。
JavaScript とは異なり、C# は静的言語であり、両方のクラスが共通のインターフェイスまたは基本クラスを実装していない場合は、リフレクションを使用して同じ目標を達成できます。
instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);
A と B に同じインターフェイスを実装させることができない場合は、次のようにリフレクションを使用して名前でクラス メンバーにアクセスする必要があります。
typeof(A).GetProperty("Text").GetValue(theInstance, null);
どこでtheInstance
A クラスのインスタンスになります。
理想的には、A と B のベースとなるメンバー "Text" を持つ単一のクラスを持つ必要があります。おそらく便利ではありませんが、より確実で正しいです。他の方法で同じことができる場合は、リフレクションを使用しないようにしてください。
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();