C# 为什么我们不能定义虚拟受保护的成员?[复制]

C# why we cannot define virtual protected members? [duplicate]

提问人:Andrea Bardelli 提问时间:9/12/2023 最后编辑:wohlstadAndrea Bardelli 更新时间:9/12/2023 访问量:68

问:

下面的代码会导致以下编译错误:

修饰符 virtual 对此项目无效

为什么?

internal class Animal {
    protected virtual string prop; //<- error here: the modifier virtual is not valid for this item
}

在 Windows 文档上,它暗示 protected 是一个允许的关键字(我认为没有理由不这样做)。

这里也问了同样的问题,但答案是“访问说明符必须与父类匹配”。在上面的示例中,没有父类。

我正在使用 C# 10 .NET6型

C# .NET 虚拟 访问说明符

评论

3赞 Ralf 9/12/2023
“virtual 关键字用于修改方法、属性、索引器或事件声明,并允许在派生类中重写它。 你没有它只是一个字段。
0赞 Jonathan Dodds 9/12/2023
您引用的 SO 问题与您的问题无关。您不是财产。这是一个领域。实际的错误消息是“修饰符'virtual'对此项目无效”。这是一个 CS0106 错误。我将提交对您的问题的编辑。prop
0赞 wohlstad 9/12/2023
我回滚了您的编辑,因为不应编辑问题以包含给出的答案。

答:

4赞 wohlstad 9/12/2023 #1

在当前代码中,它不是属性,而是字段
字段不能是虚拟的:
prop

virtual 关键字用于修改方法、属性、索引器或 事件声明

(强调是我的)

若要使其成为属性,必须提供 和 方法,或指定使用其默认版本,
如下所示:
getset

internal class Animal
{
    protected virtual string prop { get; set; } 
}