Я пишу сетевую библиотеку C# (в основном, как упражнение для обучения, это не слишком важно для меня, если кто-либо фактически заканчивает тем, м. решения уже есть).Совет по дизайну - когда использовать «виртуальный» и «запечатанный» эффективно
Я доволен своей структурой до сих пор ... У меня есть несколько уровней доступного клиента/сервера, которые могут связываться с необработанными байтами через сокеты или немного сложнее с помощью сериализованных объектов сообщений.
Вопрос (проблема?) Я сталкиваюсь, когда именно я должен объявить метод, свойство или событие sealed
, virtual
или без квалификатора.
Я знаю, что все это делает - sealed
предотвращает наследование класса или дальнейшее переопределение метода. virtual
позволит полиморфное поведение посредством переопределения метода.
Поскольку я разрабатываю библиотеку классов, однако, я не уверен , когда использовать их. Это вопрос расширяемости, я думаю ... Я предоставляю некоторые интерфейсы, абстрактный класс или два, и некоторые конкретные реализации для пользователей моей библиотеки для использования или расширения, но у меня возникают трудности с решением, когда это «хорошая идея», явно запретить вывод класса или разрешить переопределяющую функциональность.
Любые общие указатели или рекомендации, которые следует учитывать при проектировании моих классов для использования другими?
This question и this one были несколько полезными, так же как this one, но так как я пишу распределяемую библиотеку, я пытаюсь охватить все мои базы.
(отвечая на комментарии, которые были удалены!) @ (отредактированный) - не соответствует действительности; вы можете пометить «переопределить» как «запечатанный», чтобы предотвратить дальнейшие переопределения. –