Правильное использование абстрактного класса - PullRequest
1 голос
/ 12 марта 2011

Я использую .Net и у меня простой дизайн мастер-класса и подкласса. Мой мастер-класс содержит почти все функциональные возможности, и подкласс должен только установить значение от мастера. Я думал о том, чтобы сделать мастер абстрактным классом, но нет методов, которые я должен переопределить, но я хотел бы подтвердить идею, что мастер-класс не обязательно может существовать сам по себе. Кроме того, я хотел бы подчеркнуть, что свойство от мастера должно быть установлено подклассом. Что здесь уместно? Спасибо за любую помощь!

Ответы [ 6 ]

2 голосов
/ 12 марта 2011

Если никто не должен создавать экземпляр мастер-класса, определенно целесообразно сделать его abstract.

Что касается свойства, сделайте его абстрактным свойством.В мастере напишите что-то вроде:

public abstract int MyProperty { get; } 

и затем подкласс должен переопределить его.

1 голос
/ 12 марта 2011

Мой мастер-класс содержит почти все функциональность и подкласс нужно только установить значение из мастер.

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

Примерно так:

public class MasterClass
{
    public string MyValue { get; set; }
    private MasterClass()
    {
    }

    public static MasterClass CreateMaster(string val)
    {
        MasterClass mc = new MasterClass() { MyValue = val };
        return mc;
    }
}
1 голос
/ 12 марта 2011

Было бы неплохо сделать мастер-класс абстрактным - ведь вы никогда не хотите, чтобы он использовался без наследования.

Вы также можете объявить свойство абстрактным, так что ему придетсябыть переопределенным в дочернем классе:

public abstract string MyProperty { get; set; }
1 голос
/ 12 марта 2011

Абстрактный класс подходит. Вы можете иметь защищенный конструктор, который принимает интересующее вас свойство, так что подклассы должны будут предоставить

1 голос
/ 12 марта 2011

Если мастер-класс действительно не может иметь конкретных экземпляров, то сделать его абстрактным абсолютно нормально и действительно правильно.

0 голосов
/ 12 марта 2011

Если расширять нечего, кроме установки какого-то определенного состояния, которое уже находится в «master», то звучит так, будто вам вообще не нужно наследование и, возможно, вместо этого вам нужно контролировать, как экземпляры вашего «master» класса построены.

Вместо этого вы можете использовать фабричный шаблон.

Однако, если вы меняете поведение, тогда определенно использование abstract гарантировано!

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