CA1046: Başvuru türlerinde eşittir işleçlerini aşırı yüklemeyin
TypeName |
DoNotOverloadOperatorEqualsOnReferenceTypes |
CheckId |
CA1046 |
Kategori |
Microsoft.Design |
Değişiklik kesiliyor |
Bölme |
Neden
Bir ortak veya iç içe geçmiş ortak başvuru türü Eşitlik işlecini overloads.
Kural Tanımı
Başvuru tipleri için varsayılan uygulama eşitlik işlecinin hemen her zaman doğrudur.Varsayılan olarak, yalnızca aynı nesneye gelirseniz eşit iki başvuru.
İhlalleri düzeltmek nasıl
Bu kuralı ihlal düzeltmek için eşitlik işlecinin uygulamasını kaldırın.
Uyarıları ne zaman
Başvuru tipinin yerleşik değer türü gibi davranır, bir uyarı bu kuraldan bastırmak güvenlidir.Toplama veya çıkarma türü örnekleri üzerinde yapmak için anlamlı, Eşitlik işlecini uygulamak ve ihlali bastırmak büyük olasılıkla doğrudur.
Örnek
Aşağıdaki örnek, iki başvuru karşılaştırırken varsayılan davranışı gösterir.
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);
}
}
}
Aşağıdaki uygulama bazı başvurularını karşılaştırır.
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");
}
}
}
Bu örnek aşağıdaki çıktıyı üretir.
İlgili kuralları
CA1013: Eşittir işlecini ekleme ve çıkarmayı aşırı yükleyerek aşırı yükleyin
Ayrıca bkz.
Başvuru
Diğer Kaynaklar
Guidelines for Implementing Equals and the Equality Operator (==)