调用基本方法作为基本类型

时间:2013-05-29 06:58:12

标签: c#

我有这两个班级:

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();
}

现在,输出是“类型的 B”。有没有办法从B实例调用ShowType()方法作为A实例?那么输出将是“ A的类型?”

感谢。

4 个答案:

答案 0 :(得分:3)

如果您想在此处选择多态,则可以使用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) 你在那里运气不好,这是不可能的。

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

答案 1 :(得分:2)

假设你并不意味着声明ShowType虚假而且覆盖它,基本上没有。 GetType()是非虚拟的,并且始终返回对象的实际运行时类型。

答案 2 :(得分:0)

试试这个:

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

当然,当System.Objectb类实例时,这将返回A

答案 3 :(得分:0)

这是你的条件

首先,您不想修复基本代码。 第二,通过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

}