簡體   English   中英

為什么此C#代碼具有未聲明的get主體構建? 以及如何使編譯器對此產生錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM