CA1033: A felületi metódusokat gyermektípusok szerint kell meghívni
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA1033 |
Cím | A felületi módszereknek gyermektípusok szerint hívhatóknak 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 külsőleg nem látható típus explicit módon implementál egy nyilvános felületet, és nem nyújt alternatív külsőleg látható metódust, amelynek neve megegyezik.
Szabály leírása
Fontolja meg egy olyan alaptípust, amely explicit módon implementál egy nyilvános felületi metódust. Az alaptípusból származó típus csak az aktuális (C#-ban) példányrathis
mutató hivatkozással érheti el az örökölt illesztőmetódust, amely a felületre kerül. Ha a származtatott típus (explicit módon) újrakonfigurálja az örökölt interfészmetódust, az alap implementáció már nem érhető el. Az aktuális példányhivatkozáson keresztüli hívás meghívja a származtatott implementációt; ez rekurziót és egy esetleges verem túlcsordulását okozza.
Ez a szabály nem jelenti a külsőleg látható Close()
vagy System.IDisposable.Dispose(Boolean)
metódusok explicit megvalósításának System.IDisposable.Dispose megsértését.
Szabálysértések kijavítása
A szabály megsértésének kijavításához implementáljon egy új metódust, amely ugyanazt a funkciót teszi elérhetővé, és a származtatott típusok számára látható, vagy nemexplicit implementációra vált. Ha a kompatibilitástörő változás elfogadható, egy másik lehetőség a típus lezártsá tétele.
Mikor kell letiltani a figyelmeztetéseket?
A szabály figyelmeztetését nyugodtan letilthatja, ha olyan külsőleg látható metódus van megadva, amely ugyanazzal a funkcióval rendelkezik, de más néven, mint a kifejezetten implementált metódus.
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 CA1033
// The code that's violating the rule is on this line.
#pragma warning restore CA1033
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.CA1033.severity = none
További információ: Kódelemzési figyelmeztetések letiltása.
Példa
Az alábbi példa egy olyan típust mutat be, ViolatingBase
amely megsérti a szabályt és egy típust, FixedBase
amely a szabálysértés kijavításának módját jeleníti meg.
public interface ITest
{
void SomeMethod();
}
public class ViolatingBase : ITest
{
void ITest.SomeMethod()
{
// ...
}
}
public class FixedBase : ITest
{
void ITest.SomeMethod()
{
SomeMethod();
}
protected void SomeMethod()
{
// ...
}
}
sealed public class Derived : FixedBase, ITest
{
public void SomeMethod()
{
// The following would cause recursion and a stack overflow.
// ((ITest)this).SomeMethod();
// The following is unavailable if derived from ViolatingBase.
base.SomeMethod();
}
}
Kapcsolódó információk
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: