0

スーパークラスで、サブクラスのタイプを除いて、現在のクラス インスタンス (「this」と同等) を取得する方法はありますか?

C.DoStuff() に提供される型は、B ではなく A のインスタンスです。クラスのプロパティでリフレクション作業を行っていますが、タイプ AI であるため、タイプ A からプロパティを取得できません。

class A
{
  public void DoStuff()
  {
    C.DoStuff(this); 
  }
}

class B : A
{

}

class C
{
  public static void main(string[] args)
  {
    A inst = new B();
    inst.DoStuff();
  }

  public static void DoStuff<T>(T obj) {//do reflection on generic type}
}
4

2 に答える 2

1

関数を次のように変更した場合

public static void DoStuff<T>(T obj)
        {
            Console.WriteLine(typeof(A).IsInstanceOfType(obj));
            Console.WriteLine(obj.GetType());
        }

あなたが主張するようにタイプAではなく、タイプBの静止画が表示されますが、それはAのインスタンスであるため、はい、それでもBとして扱うことができます

で同じことを行うこともできます

public void DoStuff()
  {
    Console.WriteLine(typeof(A).IsInstanceOfType(this));
    Console.WriteLine(this.GetType());
    C.DoStuff(this); 
  }

はまだ B ですが、A のインスタンスでもあります

于 2013-02-27T01:44:51.240 に答える
0

あなたはおそらくこれで逃げることができます:

Type subclass = typeof(B);

次に、意図したとおりにサブクラスでリフレクションを実行します。

于 2013-02-27T01:51:19.290 に答える