2009-09-26 67 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>