Как переопределить тип члена абстрактного класса в дочернем классе
-
18-09-2019 - |
Вопрос
У меня есть следующий код:
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>
.
Не связан с StackOverflow