1

クラス A と B のインスタンスがあり、両方のクラスがメンバー 'Text' を実装しています。一般的な方法でメンバー Text にアクセスする方法はありますか? 私は単純に言うJavaScriptの方法に似た何かを望んでいます:

instance['Text'] = value;

注: 残念ながら、これら 2 つのクラスは両方とも Text メンバーと同じインターフェイスを実装していません。

4

4 に答える 4

2

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

instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);
于 2009-12-04T08:22:58.713 に答える
1

A と B に同じインターフェイスを実装させることができない場合は、次のようにリフレクションを使用して名前でクラス メンバーにアクセスする必要があります。

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

どこでtheInstanceA クラスのインスタンスになります。

于 2009-12-04T08:23:44.083 に答える
0

理想的には、A と B のベースとなるメンバー "Text" を持つ単一のクラスを持つ必要があります。おそらく便利ではありませんが、より確実で正しいです。他の方法で同じことができる場合は、リフレクションを使用しないようにしてください。

于 2009-12-04T08:36:11.330 に答える
0

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();
于 2009-12-04T09:18:14.300 に答える