什么是虚拟方法 (virtual function in c#)

为什么你会声明一个方法为“虚拟”。

为什么你会声明一个方法为“虚拟”。

使用 virtual 有什么好处?

67

Virtual修饰符用于标记可以使用override修饰符在派生类中修改 method\ property (ect)。

例子:

class A
{
    public virtual void Foo()
       //DoStuff For A
}
class B : A
{
    public override void Foo()
    //DoStuff For B
    //now call the base to do the stuff for A and B 
    //if required
    base.Foo()
}
47

Virtual 允许继承类替换基类随后使用的方法。

public class Thingy
{
    public virtual void StepA()
    {
        Console.Out.WriteLine("Zing");
    }
    public void Action()
    {
        StepA();
        Console.Out.WriteLine("A Thingy in Action.");
    }
}
public class Widget : Thingy
{
    public override void StepA()
    {
        Console.Out.WriteLine("Wiggy");
    }
}
class Program
{
    static void Main(string[] args)
    {
        Thingy thingy = new Thingy();
        Widget widget = new Widget();
        thingy.Action();
        widget.Action();
        Console.Out.WriteLine("Press any key to quit.");
        Console.ReadKey();
    }
 }

当您运行程序时,您的输出将是:

Zing 
A Thingy in Action. 
Wiggy 
A Thingy in Action.

请注意,即使 Widget 调用了在 Thingy 级别定义的 Action () 方法,Thingy 内部也调用了 Widget 的 StepA () 方法。

基本的答案是它给了一个类的继承者更多的灵活性。当然,你必须很好地设计你的类,否则它可能会造成严重。

27

虚拟方法是一种方法,其中实际的方法调用取决于基础对象的运行时类型。

非虚方法是一种方法,其中调用的实际方法取决于方法调用时对象的引用类型。

13
Virtual Methods on MSDN

virtual 关键字用于修改方法或属性声明,在这种情况下,方法或属性称为虚拟成员。可以通过派生类中的重写成员更改虚拟成员的实现。

调用虚方法时,将检查对象的运行时类型是否有重写成员。如果没有派生类重写该成员,则调用最派生类中的重写成员(可能是原始成员)。(有关运行时类型和大多数派生实现的更多信息,请参见 10.5.3 虚方法。)

默认情况下,方法是非虚拟的。您不能重写非虚拟方法。

不能将虚拟修改器与下列修改器一起使用:

staticabstractoverride

除了声明和调用语法的差异之外,虚拟属性的行为类似于抽象方法。

在静态属性上使用虚拟修饰符是错误的。

通过包含使用 override 修饰符的属性声明,可以在派生类中重写虚拟继承属性。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(408)
从ReactNative应用程序创建自己的 Web文档
上一篇
CSS三角形是如何工作的
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(70条)