Это в порядке для получения абстрактного класса из неабстрактного класса или там что-то не так с этим подходом?
Вот немного примера:
public class Task {
// Some Members
}
public abstract class PeriodicalTask : Task {
// Represents a base class for task that has to be done periodicaly.
// Some additional Members
}
public class DailyTask : PeriodicalTask {
// Represents a Task that has to be done daily.
// Some additional Members
}
public class WeeklyTask : PeriodicalTask {
// Represents a Task that has to be done weekly.
// Some additional Members
}
В примере выше я не хочу делать класс краткий обзор Задачи, потому что я хочу инстанцировать его непосредственно. PeriodicalTask должен наследовать функциональность от Задачи и добавить некоторых дополнительных участников, но я не хочу инстанцировать его непосредственно. Только производный класс PeriodicalTask нужно инстанцировать.
Я не вижу ничего плохого в этом подходе.
У вас может быть какой-то базовый тип, который можно описать конкретными терминами. Теперь, только потому, что объект этого типа может быть дополнительно классифицирован согласно некоторому подтипу, из этого не следует, что все такие подтипы столь же конкретны; они, в свою очередь, могут потребовать дальнейшей конкретизации.
Пример из реального мира:
Человек
- конкретный (не абстрактный)
Родной брат: Человек
- абстрактный
Брат: Родной брат
- бетон
Сестра: Сиблинг
- бетон
Использование абстрактного не является правильным подходом, поэтому используйте защищенный или внутренний конструктор, например. Это предотвратит непосредственное создание экземпляров PeriodicalTask, но его производные классы по-прежнему будут иметь к нему доступ.
В этом нет ничего плохого.
Если вы посмотрите на большую иерархию, такую как WinForms, вы найдете несколько уровней абстрактных типов.
Задачи MSBuild также являются хорошим (и более подходящим) примером.
Подобные вещи происходят постоянно: все абстрактные классы наследуются от System.Object
, класс, который сам по себе не является абстрактным
.
new System.Object ()
иногда бывает полезен для блокировки, если у вас нет ничего другого, вы можете заблокировать.