簡體   English   中英

在構造函數中訪問已實現的抽象屬性會導致CA2214:不要在構造函數中調用可覆蓋的方法

[英]Accessing an implemented abstract property in the constructor causes CA2214: Do not call overridable methods in constructors

public abstract class MyBase
{
    public abstract bool MyProperty
    {
        get;
        protected set;
    }
}

public class MyClass : MyBase
{
    public MyClass()
    {
        this.MyProperty = true;
    }

    public override bool MyProperty
    {
        get;
        protected set;
    }
}

構造函數MyClass()導致CA2214:

不要在構造函數中調用可覆蓋的方法。

這通常僅顯示是否調用與構造函數在同一類中定義的虛方法。 例如,在MyBase的構造函數中訪問MyProperty 這里我在派生類的構造函數中調用繼承的抽象屬性的非虛擬重寫實現

不,它仍然是虛擬的,因為override不會隱含地隱藏成員。 (試一試:從MyClass派生另一個類,你可以再次覆蓋MyProperty 。)

你可以明確地密封它:

public override sealed bool MyProperty
{
    get;
    protected set;
}

那時我希望警告消失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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