CA1859: Gelişmiş performans için mümkün olduğunda somut türler kullanın

Özellik Değer
Kural Kimliği CA1859
Başlık İyileştirilmiş performans için mümkün olduğunda somut türler kullanın
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
Tanıtılan sürüm .NET 8
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Kod, arabirim türlerini veya soyut türleri kullanarak gereksiz arabirim çağrılarına veya sanal çağrılara yol açar.

Kural açıklaması

Bu kural, belirli yerel değişkenlerin, alanların, özelliklerin, yöntem parametrelerinin ve yöntem dönüş türlerinin arabirimden veya soyut türlerden mümkün olduğunda somut türlere yükseltilmesi önerilir. Somut türlerin kullanılması, sanal veya arabirim gönderim yükünü en aza indirerek ve inlining'i etkinleştirerek daha kaliteli kod oluşturulmasına yol açar.

Bu kural yalnızca somut bir tür kullanılarak önlenebilen sanal çağrılar veya arabirim çağrıları olduğunda ihlalleri bildirir.

İhlalleri düzeltme

Türleri kural tarafından önerilen şekilde yükseltin. Genel olarak, türü değiştirmenin kodun davranışı üzerinde hiçbir etkisi yoktur, ancak performansını artırır.

Örnek

Aşağıdaki kod parçacığı CA1859 ihlalini gösterir:

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();
    }
}

Aşağıdaki kod parçacığı ihlali düzeltir:

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();
    }
}

Uyarıların ne zaman bastırılması gerekiyor?

Performans önemli değilse uyarıyı bastırmak güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.