C#에서 동일한 추상 클래스에서 파생 된 두 클래스를 비교할 수 있기를 바랍니다. 다음 코드는 내 문제를 설명합니다.기본 클래스를 기반으로 두 개체를 어떻게 비교합니까?
이제 BaseClass
을 추상화하지 않고 코드를 수정 한 다음 ToBassClass()
에 new BaseClass
개체를 반환 할 수 있습니다. 그러나 더 우아하고 효율적인 솔루션이 아닌가?
abstract class BaseClass
{
BaseClass(int x)
{
X = x;
}
int X { get; private set; }
// It is probably not necessary to override Equals for such a simple class,
// but I've done it to illustrate my point.
override Equals(object other)
{
if (!other is BaseClass)
{
return false;
}
BaseClass otherBaseClass = (BaseClass)other;
return (otherBaseClass.X == this.X);
}
BaseClass ToBaseClass()
{
// The explicit is only included for clarity.
return (BaseClass)this;
}
}
class ClassA : BaseClass
{
ClassA(int x, int y)
: base (x)
{
Y = y;
}
int Y { get; private set; }
}
class ClassB : BaseClass
{
ClassB(int x, int z)
: base (x)
{
Z = z;
}
int Z { get; private set; }
}
var a = new A(1, 2);
var b = new B(1, 3);
// This fails because despite the call to ToBaseClass(), a and b are treated
// as ClassA and ClassB classes so the overridden Equals() is never called.
Assert.AreEqual(a.ToBaseClass(), b.ToBaseClass());
Assert.True()? – SoftMemes
또한 int Z {get; 사립 Z; } int 여야합니다. Z {get; 개인 집합; }? – GraemeF