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 | CA1064 |
| Başlık | Özel durumlar genel olmalıdır |
| Kategori | Tasarım |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Özel erişime sahip bir istisna doğrudan Exception, SystemException veya ApplicationException'den türetilir.
Kural açıklaması
İç özel durum yalnızca kendi iç kapsamı içinde görünür. İç kapsamın dışına çıkan bir istisnadan sonra, yalnızca temel istisna istisnayı yakalamak için kullanılabilir. İç özel durum , Exceptionveya SystemExceptionöğesinden ApplicationExceptiondevralındıysa, dış kod özel durumla ne yapacağını bilmek için yeterli bilgiye sahip olmaz.
Ancak, kodun daha sonra bir iç özel durum için temel olarak kullanılan genel bir özel durumu varsa, kodun daha sonra temel özel durumla akıllı bir şey yapabileceğini varsaymak mantıklıdır. Genel özel durum, Exception, SystemException veya ApplicationException tarafından sağlanan bilgiden daha fazla bilgiye sahip olacaktır.
İhlalleri düzeltme
Özel durumu açık hale getirin veya dahili özel durumu, Exception, SystemException veya ApplicationException'den farklı bir genel özel durumdan türeyin.
Uyarıların ne zaman bastırılması gerekiyor?
Eğer özel durumun kendi kapsamı içinde yakalanacağından her durumda eminseniz, bu kuraldan bir mesajı bastırabilirsiniz.
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 CA1064
// The code that's violating the rule is on this line.
#pragma warning restore CA1064
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.CA1064.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Örnek
Özel durum sınıfı doğrudan Exception'tan türetildiği ve dahili olduğu için bu kural ilk örnekleme yöntemi olan FirstCustomException'da tetiklenir. Sınıf da doğrudan Exception'tan türetilmiş olsa da, sınıf genel olarak bildirildiğinden, kural SecondCustomException sınıfında tetiklenmez. Üçüncü sınıf da, doğrudan System.Exception, System.SystemException veya System.ApplicationException öğesinden türetilmediğinden kuralı tetiklemiyor.
// Violates this rule
[Serializable]
internal class FirstCustomException : Exception
{
internal FirstCustomException()
{
}
internal FirstCustomException(string message)
: base(message)
{
}
internal FirstCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected FirstCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
// Does not violate this rule because
// SecondCustomException is public
[Serializable]
public class SecondCustomException : Exception
{
public SecondCustomException()
{
}
public SecondCustomException(string message)
: base(message)
{
}
public SecondCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected SecondCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}
// Does not violate this rule because
// ThirdCustomException it does not derive directly from
// Exception, SystemException, or ApplicationException
[Serializable]
internal class ThirdCustomException : SecondCustomException
{
internal ThirdCustomException()
{
}
internal ThirdCustomException(string message)
: base(message)
{
}
internal ThirdCustomException(string message, Exception innerException)
: base(message, innerException)
{
}
protected ThirdCustomException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}