1

我有以下代码:

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

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

这会产生编译错误,我想知道我是否必须在 TestProperty 中使用泛型类型才能实现在子类中具有不同类型的同名目标?

4

1 回答 1

6

是的,C# 不支持协变返回类型。您确实可以在这里使用泛型:

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

public class StringProperty : TestProperty<string>
{
}

此时无需覆盖 - 事实上,除非您要执行其他任何操作,否则您最好StringProperty完全摆脱并只使用TestProperty<string>.

于 2009-09-26T20:10:19.920 回答