2009-09-26 101 views
1

我有以下代碼:如何重寫成員的類型在子類的抽象類

public abstract class TestProperty 
{ 
    public abstract Object PropertyValue { get; set; } 
} 

public class StringProperty: TestProperty 
{ 
    public override string PropertyValue {get;set} 
} 

其產生編譯錯誤,我不知道我應該使用泛型類型的TestProperty以才達到我的在兒童班有不同類型的同名兒童的目標?

回答

6

是的,C#不支持協變返回類型。事實上,你可以在這裏使用泛型:

public abstract class TestProperty<T> 
{ 
    public abstract T PropertyValue { get; set; } 
} 

public class StringProperty : TestProperty<string> 
{ 
} 

沒有必要在這一點上重寫 - 事實上,除非你打算做別的事情,你還不如完全刪除的StringProperty,只是使用TestProperty<string>