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

本文关键字:超类 子类 类型 实例 引用 | 更新日期: 2023-09-27 18:01:30

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

当我做类似的事情时(它太大太复杂,无法显示实际的代码,我只是希望这工作相同),以以下类型提供给C.DoStuff()是A的实例,而不是B.我正在做反射类的属性工作,因为它是A类型,我没有从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}
}

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

如果您将函数更改为

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的一个实例

你可能会侥幸逃脱:

Type subclass = typeof(B);