aşağıdaki koduNeden iki eşit IEquatable <T> örneği yanlış mı döndürüyor?
public class Rectangle : IEquatable<Rectangle>
{
public int Width { get; set; }
public int Height { get; set; }
public bool Equals(Rectangle other)
{
return Width == other.Width
&& Height == other.Height;
}
}
IEquatable<Rectangle> a = new Rectangle() { Width = 10, Height = 20 };
IEquatable<Rectangle> b = new Rectangle() { Width = 10, Height = 20 };
a.Equals(b); // returns false;
Ben bu sınıfın değeri semantik (üzgün) korkunç biliyorum düşünün. Normalde, object.Equals(object obj)
'un da geçersiz kılınması gerektiğini bildiren IEquatable<T>
uygulaması için C# yönergelerini takip ediyorum. - Bu sadece spekülasyon.
bir ve b beri Equals
çağırdığınızda neden bu object.Equals(object obj)
yerine IEquatable<Rectangle>.Equals(Rectangle other)
çağırıyor IEquatable<Rectangle>
, ilan edilir?
O IEquatable<T>
uygulanması üzerinde object
uygulama kullanmak için biraz garip gelebilir
Neden "IEquatable" ifadesini geçtiğini anlayamadığımdan, "bunu yapma" demeniz dışında kodu nasıl düzeltebileceğimi anlatamam. –