CA1046: Non eseguire l'overload dell'operatore "uguale a" per i tipi di riferimento
TypeName |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
Category |
Microsoft.Design |
Breaking Change |
Breaking |
Causa
Un tipo di riferimento pubblico annidato o pubblico esegue l'overload dell'operatore di uguaglianza.
Descrizione della regola
Per i tipi di riferimento, l'implementazione predefinita dell'operatore di uguaglianza è quasi sempre corretta. Per impostazione predefinita, i due riferimenti sono uguali solo se puntano allo stesso oggetto.
Come correggere le violazioni
Per correggere una violazione di questa regola, rimuovere l'implementazione dell'operatore di uguaglianza.
Esclusione di avvisi
L'esclusione di un avviso da questa regola è sicura quando il tipo di riferimento presenta il comportamento di un tipo di valore incorporato. Se ha significato eseguire addizioni o sottrazioni sulle istanze del tipo, è probabilmente corretto implementare l'operatore di uguaglianza ed escludere la violazione.
Esempio
Nell'esempio riportato di seguito viene illustrato il comportamento predefinito quando si confrontano due riferimenti.
using System;
namespace DesignLibrary
{
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);
}
}
}
Nell'applicazione riportata di seguito vengono confrontati alcuni riferimenti.
using System;
namespace DesignLibrary
{
public class ReferenceTypeEquality
{
public static void Main()
{
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");
}
}
}
Questo esempio produce l'output che segue.
Regole correlate
Vedere anche
Riferimenti
Linee guida per l'implementazione del metodo Equals e dell'operatore di uguaglianza (==)