c# - 多态性:被调用方法的真实类型是什么?

标签 c# polymorphism

任何人都可以解释这段代码的行为吗,因为我正在研究多态性,所以我偶然想到了这段代码,而且我真的对其行为感到困惑:

public class Book
{
    public virtual void Method() 
    {
        Console.WriteLine("Book/ I am here in "+ GetType().Name);
    } 
} 
class Chapter : Book
{
    public new void Method() 
    {
        Console.WriteLine("Chapter/ I am here in "+ GetType().Name);
    }

    static void Main() 
    {
        Book myBook = new Chapter() ;
        myBook.Method();
    } 
} 

该程序的输出是

Book/ I am here in Chapter

这意味着实例调用了 book 类中的方法,但获取了类型 chapterGetType() 方法是否取决于它调用的实例,而不是它所在的类?

最佳答案

是的,GetType() 在运行时从对象(实例)获取实际类型。

如果您更改了public new void Method() public override void Method() 它会打印出另一行。

参见MSDN :

Return Value

Type: System.Type

The exact runtime type of the current instance.

关于c# - 多态性:被调用方法的真实类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37610747/

相关文章:

java - Java中匿名类的方法

c++ - 多态类型的代理类,使用模板

java - 使用父类(super class)中已在子类中重写的方法,具体取决于调用它的对象的类型

java - 为什么代码会产生以下结果?

c# - 如何将自定义对象的集合存储到 user.config 文件中?

C# Flatten 嵌套对象

c# - Entity Framework 和 WPF - 什么时候需要 dbContext.Load()?

c# - 当输入为 IQueryable 时,无法让 Automapper 返回派生类型

C# 浏览器缩放

c# - 循环中的变量