私はベースクラスClass1と派生クラス2を持っています。私はclass2の2つのインスタンスを作成しますが、class1として定義します。 私の問題は、私はこのオブジェクト間の一般的な比較を行うことはできません。ここで は、たとえば、次のとおりですためスタティック演算子==オーバーレイされたメソッドを検出しない
if (obj1 == obj2)
::私はラインを変更した場合
public class Class1
{
public int Property1 = 0;
}
public class Class2 : Class1
{
public int Property2 = 0;
public static bool operator ==(Class2 c1, Class2 c2)
{
return c1.Property2 == c2.Property2;
}
public static bool operator !=(Class2 c1, Class2 c2)
{
return c1.Property2 != c2.Property2;
}
}
public class Class3 : Class1
{
public int Property3 = 0;
}
static void Main(string[] args)
{
Class1 obj1 = new Class2();
Class1 obj2 = new Class2();
if (obj1 == obj2)
{
Console.WriteLine("Yes !!! The two objects are equal!");
}
else
{
Console.WriteLine("The two objects are not equal.");
}
}
if ((Class2)obj1 == (Class2)obj2)
すべては右ですが、OBJ1場合とClass3にはobj2があり、私はエラーを取得する
どうすれば解決できますか?
はあなたに
Crandel
c#prvoide標準参照==自動的に値比較演算子を実行しようとしていますか? – rerun
'overloaded'または' overridden'を意味しますか?過大評価とは何かを意味します。あなたはどんなエラーを出していますか? – Oded
私は静的メソッドがオーバーロードされていてオーバーライドされていないことを理解しています。たぶん、私はオーバーライドされた結果を期待します。私は実際にそれを試していないが、キャストエラーと思われる – Crandel