2012-01-18 39 views
1

如何調用==操作符來調用孩子的實現?

public abstract class DataClass 
{ 
    public static bool operator ==(DataClass left, DataClass right) 
    { 
     return left.Equals(right); 
    } 
} 

,這是什麼情況

object left = new DataClass(); 
object right = new DataClass(); 
bool expected = true; 
bool actual; 
actual = ((DataClass)left) == ((DataClass)right); 
Assert.AreEqual(expected, actual); // passes 
actual = left == right; 
Assert.AreEqual(expected, actual); // fails 

如何使它調用正確實施,沒有明確地鑄造了嗎?

+0

如果類是可變的和/或不'sealed',然後重寫'==操作符'首先最有可能是錯誤的。你應該總是使用'Equals'而不是'=='*,除非你知道這個特定的類在平等*中起作用。由於'物體'遠離這個理想,所以不要這樣做。 – Jon 2012-01-18 18:21:11

回答

8

static方法不受多態行爲(即它們不能被覆寫)。演員是必需的。

對於可能的解決辦法看到此相關的問題:Override a static method

最有可能的,你將不得不求助於創建一個實例方法或重寫Equals代替。

+0

我已覆蓋Equals,但運算符==不會調用Equals,除非以這種方式實現。 – 2012-01-19 11:52:40

0

你不能這樣做,因爲運營商是靜態的,通過定義,它們不能是虛擬/覆蓋。

在我有我結束了覆蓋bool Equals(object o)和使用方法,而不是運營商的同一個問題的情況下。如果這不是一個選項,那麼演員陣容是必要的。

相關問題