Как переопределить тип члена абстрактного класса в дочернем классе

StackOverflow https://stackoverflow.com/questions/1482068

Вопрос

У меня есть следующий код:

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

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

которые генерируют ошибку компиляции, интересно, нужно ли мне использовать общий тип в TestProperty, чтобы достичь своей цели - иметь разные типы с одним и тем же именем в дочернем классе?

Это было полезно?

Решение

Да, C# не поддерживает ковариантные типы возврата.Вы действительно можете использовать дженерики здесь:

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

public class StringProperty : TestProperty<string>
{
}

На этом этапе нет необходимости переопределять - и действительно, если вы не собираетесь делать что-то еще, вы можете с таким же успехом избавиться от StringProperty полностью и просто используйте TestProperty<string>.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top