2012-09-27 18 views
2

OOP中讨论的特性/主题之一是虚拟成员。我期待在一份声明如下:运行时类型的虚拟成员调度

虚拟成员运行时类型派遣

这是否意味着虚拟方法依赖于对象类型(S)的被接受或处理,而变量类型?

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

感谢, 阿米特

回答

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!"; 
    } 
} 

现在,我们有一个方法:

public void PrintHi(Parent instance) 
{ 
    Console.WriteLine(instance.SayHi()); 
} 

你可以调用该方法的三种方式之一,但不知道结果如何,直到运行时,如果你看到的一切都是上面的方法:

PrintHi(new Parent()); // Hi 
PrintHi(new NiceChild()); // Hello World! 
PrintHi(new MeanChild()); // You suck! 
+0

很好的解释!谢谢Justin。 –