[英]Why does this C# code with an an undeclared get body build? And how can I make the compiler throw an error on this?
令我惊讶的是,以下代码可以构建并正常运行:
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”必须声明一个主体,因为它没有被标记为抽象或外部。 自动实现的属性必须定义get和set访问器。
构建服务器必须使用某些设置来阻止编译相同的代码。 我的第二个问题是:当我尝试编译此代码时,可以检查哪些设置以确保编译器向我发出此警告?
我不希望它会编译,因为
MyChild
类没有为重写的MyBool
getter声明主体。
那是因为它很好。 MyBool
属性具有一个(隐式)设置器,但仅对构造方法可用。 这是C#6编译器的新功能,因此您的构建服务器需要相同版本的编译器才能完成此工作。
不需要抛出异常或类似的东西。 如果要声明一个set
,只需确保将其添加到基类的属性定义中即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.