CA1046: Není přetěžování operátor rovná se na typy odkazů
Název_typu |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
Kategorie |
Microsoft.design |
Změnit rozdělení |
Rozdělení |
Příčina
Typ veřejné nebo vnořené veřejné odkazu přetížení operátor rovnosti.
Popis pravidla
Typy odkazů provádění výchozí operátor rovnosti je téměř vždy správná.Dva odkazy jsou standardně rovná pouze v případě, že odkazují na stejný objekt.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla odeberte provádění operátor rovnosti.
Při potlačení upozornění
Je bezpečné potlačí upozornění od tohoto pravidla, pokud typ odkazu se chová jako typ předdefinované hodnoty.Je smysluplné provádět sčítání nebo odčítání na instance typu, je pravděpodobně správné provádění operátor rovnosti a potlačit narušení.
Příklad
Následující příklad ukazuje výchozí chování při porovnání dvou odkazy.
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);
}
}
}
Následující aplikace porovnává některých odkazů.
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");
}
}
}
Tento příklad vytvoří následující výstup.
Souvisejících pravidel
CA1013: Operátor rovná přetížení na přetížení sečíst a odečíst
Viz také
Referenční dokumentace
Guidelines for Implementing Equals and the Equality Operator (==)