gpt4 book ai didi

c# - 默认方法是 "virtual"还是 "not virtual"? :

转载 作者:行者123 更新时间:2023-11-30 13:47:45 25 4
gpt4 key购买 nike

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

如果那是真的,能否请您向我解释一下,在下面的示例中,我如何能够在继承自 Base 类的 Child 类中实现属性 LastName,而无需将该属性标记为“虚拟”基类? Child.LastName 属性是否“隐藏”(VB“Shadows”)基类中的相同属性?如果是这样,为什么 Child.LastName 属性中没有使用"new"关键字来表示这一点?

这个测试示例似乎向我暗示方法和 virtual 默认情况下,在 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");
}

}

最佳答案

默认情况下,C# 中的方法不是虚拟的。 Child 类中的 LastName 隐藏了 BaseClass 中的 LastName。据我所知,这段代码甚至可以编译,但编译器会发出警告,告诉我应该使用 new 关键字。

关于c# - 默认方法是 "virtual"还是 "not virtual"? :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com