从超类引用当前类实例作为子类类型

时间:2013-02-27 01:42:43

标签: c#

有没有办法获取当前类实例(相当于'this'),除了作为子类的类型,在超类中?

当我做类似的事情(显示实际代码太大而且太复杂,我只是希望它的工作原理相同)时,提供给C.DoStuff()的类型是A的一个实例,不是B.我正在对一个类的属性进行Reflection工作,因为它的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}
}

2 个答案:

答案 0 :(得分:1)

如果您将功能更改为

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

你会看到它仍然是B型,它不是你所声称的A型,但它是A的一个实例,所以是的,你仍然可以将它视为B

你也可以在

中做同样的事情
public void DoStuff()
  {
    Console.WriteLine(typeof(A).IsInstanceOfType(this));
    Console.WriteLine(this.GetType());
    C.DoStuff(this); 
  }

仍然是B.但仍然是A的实例

答案 1 :(得分:0)

你可能只是逃避这个:

Type subclass = typeof(B);

然后按预期对子类进行反射。