gpt4 book ai didi

c# - 为什么这个带有未声明的 get body 的 C# 代码会生成?我怎样才能让编译器对此抛出错误?

转载 作者:行者123 更新时间:2023-11-30 21:48:14 25 4
gpt4 key购买 nike

令我惊讶的是,以下代码构建并运行良好:

private abstract class MyParent
{
public abstract bool MyBool { get; }
}

private class MyChild : MyParent
{
public override bool MyBool { get; } //no body declared
}

[TestMethod]
public void MyTestMethod()
{
var mc = new MyChild();
Assert.IsFalse(mc.MyBool);
}

我也没有收到任何警告。测试甚至通过。我不希望它编译,因为 MyChild 类没有为重写的 MyBool getter 声明主体。我尝试将 MyChild 类标记为 sealed,但它仍然可以编译。我的第一个问题很简单,为什么 MyChild 类不需要为 MyBool getter 提供主体?

我发现我的代码中有这样的问题,因为我的构建服务器报告了一个编译器错误:

'MyChild.MyBool.get' must declare a body because it is not marked abstract or extern. Automatically implemented properties must define both get and set accessors.

构建服务器必须使用一些阻止编译相同代码的设置。我的第二个问题是:当我尝试编译这段代码时,我可以检查哪些设置以确保编译器给我这个警告?

最佳答案

I wouldn't expect this to compile because the MyChild class doesn't declare a body for the overridden MyBool getter.

那是因为它非常好。 MyBool 属性有一个(隐式)setter,但它只对构造函数可用。这是 C# 6 编译器的一项新功能,因此您的构建服务器需要相同版本的编译器才能完成这项工作。

不需要抛出异常或类似的东西。如果您想要声明一个set,只需确保将它添加到基类的属性定义中即可。

关于c# - 为什么这个带有未声明的 get body 的 C# 代码会生成?我怎样才能让编译器对此抛出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798568/

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