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
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: