CA1064: A kivételeknek nyilvánosnak kell lenniük
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1064 |
Cím | A kivételeknek nyilvánosnak kell lenniük |
Kategória | Design |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Ok
A nem nyilvános kivétel származik közvetlenül az Exception, SystemExceptionvagy ApplicationException.
Szabály leírása
A belső kivétel csak a saját belső hatókörén belül látható. Miután a kivétel kívül esik a belső hatókörön, csak az alapkivétel használható a kivétel elfogásához. Ha a belső kivétel a külső kódtól ExceptionSystemExceptionöröklődik, ApplicationExceptionakkor a külső kód nem rendelkezik elegendő információval ahhoz, hogy tudja, mit tegyen a kivétellel.
Ha azonban a kód nyilvános kivétellel rendelkezik, amelyet később egy belső kivétel alapjául használnak, ésszerű feltételezni, hogy a kód tovább képes lesz valami intelligensre az alapkivétellel. A nyilvános kivételnek több információja lesz, mint az Exception, SystemExceptionvagy ApplicationException.
Szabálysértések kijavítása
Tegye nyilvánossá a kivételt, vagy a belső kivételt olyan nyilvános kivételből származtathatja, amely nem , SystemExceptionvagy ApplicationExceptionnemException.
Mikor kell letiltani a figyelmeztetéseket?
Ha minden esetben biztos abban, hogy a privát kivétel a saját belső hatókörébe kerül, tiltsa le a szabályból érkező üzeneteket.
Figyelmeztetés mellőzése
Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.
#pragma warning disable CA1064
// The code that's violating the rule is on this line.
#pragma warning restore CA1064
Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none
a konfigurációs fájlban.
[*.{cs,vb}]
dotnet_diagnostic.CA1064.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Ez a szabály az első példametódus, a FirstCustomException metódust aktiválja, mivel a kivételosztály közvetlenül a Kivételből származik, és belső. A szabály nem aktiválódik a SecondCustomException osztályon, mert bár az osztály közvetlenül a Kivételből is származik, az osztály nyilvánosként lesz deklarálva. A harmadik osztály nem is aktiválja a szabályt, mert nem származik közvetlenül az System.Exception, System.SystemExceptionvagy System.ApplicationException.
// 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)
{
}
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: