Я пишу сетевую библиотеку С# (в основном как учебное упражнение, это не слишком важно для меня, если кто-то на самом деле заканчивает использовать его, поскольку я уверен, что решения уже там).
Я доволен своей структурой до сих пор... У меня есть несколько уровней доступного клиента/сервера, которые могут связываться в необработанных байтах над сокетами или немного сложнее с помощью сериализованных объектов сообщений.
Вопрос (проблема?), с которым я столкнулся, - это когда я должен объявить метод, свойство или событие sealed
, virtual
или без квалификатора.
Я знаю, что все это делает - sealed
предотвращает наследование класса или дальнейшее переопределение метода. virtual
позволит полиморфное поведение посредством переопределения метода.
Так как я разрабатываю библиотеку классов, я не уверен, когда их использовать. Я думаю, что вопрос о расширяемости... Я предоставляю некоторые интерфейсы, абстрактный класс или два, а также некоторые конкретные реализации для использования пользователями или расширения моей библиотеки, но у меня возникают трудности с выбором, когда это "хорошая идея", явно запретить вывод класса или разрешить переопределяющую функциональность.
Любые общие указатели или советы, которые следует учитывать при разработке моих классов для использования другими?
Этот вопрос и этот были несколько полезны, как и этот, но поскольку я пишу дистрибутивную библиотеку, я пытаюсь охватить все мои базы.