CA1859:盡可能使用具體類型以改善效能

屬性
規則識別碼 CA1859
標題 盡可能使用具體類型以改善效能
類別 效能
修正程式是中斷或非中斷 不中斷
引進的版本 .NET 8
預設在 .NET 8 中啟用 建議

原因

程式碼會使用介面類別型或抽象類別型,導致不必要的介面呼叫或虛擬呼叫。

檔案描述

此規則建議盡可能將特定區域變數、欄位、屬性、方法參數和方法傳回型別從介面或抽象類別型升級為具體類型。 使用具體類型可藉由將虛擬或介面分派額外負荷降到最低並啟用內嵌,進而產生更高的品質產生的程式碼。

此規則只會在有虛擬呼叫或介面呼叫可實際避免使用具體類型時報告違規。

如何修正違規

依照規則的建議升級類型。 一般而言,變更類型不會影響程式碼的行為,但它可改善其效能。

範例

下列程式碼片段顯示 CA1859 的違規:

abstract class A
{
    public virtual void M() { }
}

sealed class B : A
{ }

internal class C
{
    private readonly A _a = new B();

    public void Trigger()
    {
        // This performs a virtual call because
        // _a is defined as an abstract class.
        _a.M();
    }
}

下列程式碼片段會修正違規:

abstract class A
{
    public virtual void M() { }
}

sealed class B : A
{ }

internal class C
{
    private readonly B _b = new B();

    public void Trigger()
    {
        _b.M();
    }
}

隱藏警告的時機

如果效能不相關,則隱藏警告是安全的。

隱藏警告

如果您只想要隱藏單一違規,請將預處理器指示詞新增至原始程式檔以停用,然後重新啟用規則。

#pragma warning disable CA1859
// The code that's violating the rule is on this line.
#pragma warning restore CA1859

若要停用檔案、資料夾或專案的規則,請在組態檔 中將其嚴重性設定為 。 none

[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none

如需詳細資訊,請參閱 如何隱藏程式碼分析警告