c# – 默认情况下方法是“虚拟”还是“非虚拟”?:

根据this类似的StackOverflow问题和其他文章,默认情况下C#方法是“非虚拟的”,我认为它意味着你不能在派生类中覆盖它们.

如果这是真的,你可以向我解释一下,在下面的例子中,我如何能够实现继承自Base类的Child类中的LastName属性,而不将属性标记为基类的“虚拟”? Child.LastName属性是否“隐藏”(VB“阴影”)基类中的相同属性?如果是这样,为什么Child.LastName pproperty中没有使用“新”关键字来表明这一点?

这个测试示例似乎向我建议默认情况下方法和虚拟,并且在LastName属性的情况下,隐含“overrrides”,但我很确定不是这种情况.

我错过了什么?

public class BaseClass
{

    private string _FirstName;
    public virtual string FirstName {
        get { return _FirstName; }
        set { _FirstName = value; }
    }

    private string _LastName;
    public string LastName {
        get { return _LastName; }
        set { _LastName = value; }
    }

    public void Go()
    {
        MessageBox.Show("Going at default speed in Base Class");
    }

    public void Go(int speed)
    {
        MessageBox.Show("Going at " + speed.ToString() + " in Base Class");
    }
}


public class Child : BaseClass
{

    public override string FirstName {
        get { return "Childs First  Name"; }
        set { base.FirstName = value; }
    }

    public string LastName {
        get { return "Child's Last Name"; }
        set { base.LastName = value; }
    }

    public void Go()
    {
        MessageBox.Show("Going in Child Class");
    }

    public void Go(int speed)
    {
        MessageBox.Show("Going at " + speed.ToString() + " in Child Class");
    }

}
最佳答案
好吧,你做对了.如果它不是虚拟的,则会被隐藏.

new关键字在继承层次结构链中制动虚拟覆盖.

简单示例:Polymorphism, Method Hiding and Overriding in C#

转载注明原文:c# – 默认情况下方法是“虚拟”还是“非虚拟”?: - 代码日志