虚拟成员按运行时类型调度

ami*_*han 2 c# oop

OOP中讨论的功能/主题之一是虚拟成员.我正在查看如下声明:

虚拟成员按运行时类型调度

这是否意味着虚方法依赖于它接受或处理相当可变类型的对象类型?

任何更正或评论将不胜感激.

谢谢,阿米特

Jus*_*ner 7

不.它与方法接受的参数无关,因为每个实现的参数应该相同.这意味着将根据调用方法的类型在运行时解析虚方法.考虑一下:

public class Parent
{
    public virtual string SayHi()
    {
        return "Hi!";
    }
}

public class NiceChild : Parent
{
    public override string SayHi()
    {
        return "Hello World!";
    }
}

public class MeanChild : Parent
{
    public override string SayHi()
    { 
        return "You suck!";
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我们有一个方法:

public void PrintHi(Parent instance)
{
    Console.WriteLine(instance.SayHi());
}
Run Code Online (Sandbox Code Playgroud)

你可以用三种方法之一调用该方法,但是如果你看到的只是上面的方法,那么直到运行时才知道结果:

PrintHi(new Parent()); // Hi
PrintHi(new NiceChild()); // Hello World!
PrintHi(new MeanChild()); // You suck!
Run Code Online (Sandbox Code Playgroud)