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


CA1046: Ne terhelje túl az operátort a referenciatípusoknál

Tulajdonság Érték
Szabályazonosító CA1046
Cím Ne terhelje túl az operátort a referenciatípusoknál
Kategória Design
A javítás kompatibilitástörő vagy nem törik Törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A nyilvános vagy beágyazott nyilvános referenciatípus túlterheli az egyenlőségi operátort.

Szabály leírása

Referenciatípusok esetén az egyenlőségi operátor alapértelmezett megvalósítása szinte mindig helyes. Alapértelmezés szerint két hivatkozás csak akkor egyenlő, ha ugyanarra az objektumra mutatnak.

Szabálysértések kijavítása

A szabály megsértésének kijavításához távolítsa el az egyenlőségi operátor végrehajtását.

Mikor kell letiltani a figyelmeztetéseket?

Biztonságosan letilthatja a szabály figyelmeztetését, ha a referenciatípus beépített értéktípusként viselkedik. Ha értelmes a típuspéldányok összeadása vagy kivonása, akkor valószínűleg helyes az egyenlőségi operátor megvalósítása és a szabálysértés mellőzése.

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 CA1046
// The code that's violating the rule is on this line.
#pragma warning restore CA1046

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.CA1046.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Kód konfigurálása elemzéshez

A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezt a beállítást konfigurálhatja csak ehhez a szabályhoz, az összes szabályhoz, vagy az ebben a kategóriában (Tervezés) szereplő összes szabályhoz, amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott API-felületek belefoglalása

A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Example 1

Az alábbi példa két hivatkozás összehasonlítása során az alapértelmezett viselkedést mutatja be.

public class MyReferenceType
{
    private int a, b;
    public MyReferenceType(int a, int b)
    {
        this.a = a;
        this.b = b;
    }

    public override string ToString()
    {
        return String.Format("({0},{1})", a, b);
    }
}

Example 2

Az alábbi alkalmazás összehasonlít néhány hivatkozást.

public class ReferenceTypeEquality
{
    public static void Main1046()
    {
        MyReferenceType a = new MyReferenceType(2, 2);
        MyReferenceType b = new MyReferenceType(2, 2);
        MyReferenceType c = a;

        Console.WriteLine("a = new {0} and b = new {1} are equal? {2}", a, b, a.Equals(b) ? "Yes" : "No");
        Console.WriteLine("c and a are equal? {0}", c.Equals(a) ? "Yes" : "No");
        Console.WriteLine("b and a are == ? {0}", b == a ? "Yes" : "No");
        Console.WriteLine("c and a are == ? {0}", c == a ? "Yes" : "No");
    }
}

Ez a példa a következő kimenetet hozza létre:

a = new (2,2) and b = new (2,2) are equal? No
c and a are equal? Yes
b and a are == ? No
c and a are == ? Yes

Kapcsolódó információk