根据这个类似的 StackOverflow 问题和其他文章,默认情况下 C# 方法是“非虚拟的”,我认为这意味着您不能在派生类中覆盖它们。
如果这是真的,请您向我解释一下,在下面的示例中,我如何能够在继承自 Base 类的 Child 类中实现属性 LastName ,而不会在基类中将该属性标记为“虚拟”?Child.LastName 属性是否“隐藏”(VB“阴影”)基类中的相同属性?如果是这样,为什么 Child.LastName 属性中没有使用“新”关键字来表示这一点?
这个测试示例似乎向我建议默认情况下方法和虚拟,并且在 LastName 属性的情况下,隐含“覆盖”,但我很确定情况并非如此。
我错过了什么?
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");
}
}