我有以下代码:
public abstract class TestProperty
{
public abstract Object PropertyValue { get; set; }
}
public class StringProperty: TestProperty
{
public override string PropertyValue {get;set}
}
生成编译错误,我想我是否应该在TestProperty中使用泛型类型以实现我在子类中使用不同类型的同名的目标?
答案 0 :(得分:6)
是的,C#不支持协变返回类型。你确实可以在这里使用泛型:
public abstract class TestProperty<T>
{
public abstract T PropertyValue { get; set; }
}
public class StringProperty : TestProperty<string>
{
}
此时无需覆盖 - 除非您要做其他任何事情,否则您最好完全摆脱StringProperty
并使用TestProperty<string>
。