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 9'da 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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA1859.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.