Megosztás a következőn keresztül:


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, ViolatingBaseamely megsérti a szabályt és egy típust, FixedBaseamely 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