Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1822 |
| Başlık | Üyeleri static olarak işaretleyin |
| Kategori | Performans |
| Düzeltme bozucu ya da bozmayan olabilir | Bozulmaz - Derleme dışından görünmüyorsa, yaptığınız değişiklik ne olursa olsun üye için geçerlidir. Kesintisiz - Üyeyi this anahtar sözcüğüyle bir örnek üyesi olarak değiştirirseniz.Breaking - Üyeyi bir örnek üyesinden statik üyeye değiştirirseniz ve derlemenin dışında görünür durumdaysa. |
| .NET 10'da varsayılan olarak etkin | Öneri olarak |
| Geçerli diller | C# ve Visual Basic |
Neden
Örnek verisine erişmeyen bir üye statik olarak işaretlenmez (Visual Basic'te Paylaşılan).
Kural açıklaması
Örnek verilerine erişmeyen veya örnek yöntemlerini çağırmayan üyeler statik olarak işaretlenebilir (Visual Basic'te paylaşılan). Yöntemleri statik olarak işaretledikten sonra, derleyici bu üyeler için sanal olmayan çağrı noktalarını oluşturur. Sanal olmayan çağrı sitelerini yayma, geçerli nesne işaretçisinin null olmamasını sağlayan her çağrı için çalışma zamanında bir denetim yapılmasını engeller. Bu, performansa duyarlı kod için ölçülebilir bir performans kazancı elde edebilir. Bazı durumlarda, geçerli nesne örneğine erişilamaması bir doğruluk sorununu temsil eder.
İhlalleri düzeltme
Üyeyi statik (veya Visual Basic'te Paylaşılan) olarak işaretleyin veya uygunsa yöntem gövdesinde 'this'/'Me' kullanın.
Example
public class Printer
{
private readonly List<char> _items = [
'H', 'e', 'l', 'l', 'o',
];
public void PrintHello()
{
BadPrintHelloInternal();
GoodPrintHelloInternal();
GoodPrintHelloStaticInternal();
}
// This method violates the rule.
private void BadPrintHelloInternal()
{
Console.WriteLine("Hello");
}
// This methods satisfies the rule.
private void GoodPrintHelloInternal()
{
Console.WriteLine(string.Join(string.Empty, this._items));
}
private static void GoodPrintHelloStaticInternal()
{
Console.WriteLine("Hello");
}
}
Uyarıların ne zaman bastırılması gerekiyor?
Aşağıdaki durumlarda bu kuraldan gelen bir uyarıyı engellemek güvenlidir:
- Düzeltmenin hataya neden olacağı önceden gönderilen kod için.
- MarshalByRefObject sınıfından devralan sınıflardaki yöntemler için. .NET uzaktan iletişim altyapısı çağrıları AppDomain sınırları arasında iletmek için örnek dağıtımı kullandığından, bu sınıflardaki yöntemler statik olarak işaretlenmemelidir. Bu tür yöntemlerin statik hale getirilmesi, AppDomain sınırları arasında uzaktan iletişimi bozabilir.
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 CA1822
// The code that's violating the rule is on this line.
#pragma warning restore CA1822
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.CA1822.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Kod çözümleme için konfigüre et
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Bu seçeneği yalnızca bu kural için, geçerli olduğu tüm kurallar için veya bu kategorideki (Performans) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Belirli API yüzeylerini ekleme
api_surface seçeneğini ayarlayarak, bu kuralın erişilebilirliği temelinde kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Not
XXXX
CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.