调用基方法作为基类型

本文关键字:基类 类型 方法 调用 | 更新日期: 2023-09-27 18:15:44

我有这两个类:

public class A
{
    public void ShowType()
    {
        Console.WriteLine(GetType().ToString());
    }
}
public class B : A
{
}

和这个主代码:

static void Main(string[] args)
{
    B b = new B();
    b.ShowType();
    Console.ReadLine();
}

现在,输出是"type of B"。是否有任何方法从B实例调用ShowType()方法作为a实例?因此输出将是"类型的 A"?

谢谢。

调用基方法作为基类型

如果您想退出这里的多态性,您可以简单地使用typeof(A).ToString():

public class A
{
    // Will always output "type of A"
    public void ShowType()
    {
        Console.WriteLine(typeof(A).ToString());
    }
}

如果你不能改变A的代码,你只有可能覆盖ShowType。然而,要使其工作,它需要是virtual

然而,根据你对问题的评论,你实际上不希望ShowType输出"type of A"。无论实例的实际类型是什么,您都希望GetType()返回typeof(A)

在这里,您可能想要考虑组合而不是继承,并且不要从基类派生,而是让您的类使用该基类的实例。

假设您的意思不是将ShowType声明为虚拟并覆盖它,基本上不是。GetType()是非虚拟的,总是返回对象的实际运行时类型。

试试这个:

Console.WriteLine(this.GetType().BaseType.ToString());

当然,当bA类实例时,这将返回System.Object

这是你的情况

首先,你不想修改你的基础代码。其次,通过B实例调用ShowType()。这就是我的答案

这是我的代码

static void Main(string[] args)
{
  B b = new B();
  Type aType = b.Gettype().BaseType; //this is that get A through B class
  ((a)Activator.CreateInstance(atype)).ShowType(); //call ShowType of A class
}