Наследование свойств только для чтения: абстрактное или защищенное множеством - PullRequest
1 голос
/ 13 сентября 2011

Предположим, что класс A является абстрактным и определяет свойства только для чтения, которые должен обеспечить класс B, который наследует его.Лучше ли определять такие свойства как абстрактные или как защищенные множеством:

public abstract class A
{
    public abstract int Value { get; }
}
public class B : A
{
    public override int Value { get { return 1; } }
}

ИЛИ

public abstract class A
{
    public int Value { get; protected set; }
}
public class B : A
{
    public B()
    {
        Value = 1;
    }
}

Я думаю, что первое решение, вероятно, лучше, но я бы хотелуслышать другие мнения.

1 Ответ

0 голосов
/ 07 октября 2011

Это зависит от того, что вы имеете в виду только для чтения.Если вы имеете в виду только чтение для вызывающих, то я бы предпочел второе решение.

Первое решение заставляет дочерний класс реализовать get, что хорошо.Но он запрещает дочернему элементу реализовывать set (даже защищенный), что плохо.

При втором решении весь интерфейс Value определяется базовым классом, который является хорошим, и дочерним классом.класс по-прежнему может устанавливать значение при выборе, что также хорошо.

Если, с другой стороны, под словом «только для чтения» вы подразумеваете «только чтение», то есть даже дочернему классу не разрешеноУстановите значение, тогда первое решение лучше.Вы даже получите правильную ошибку компиляции, если попытаетесь ее установить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...