У меня есть библиотека классов, в которой описываются различные компоненты соединительного оборудования, такие как гвозди, винты и болты, которые мы будем называть ConnectorLibrary. Я пытаюсь создать библиотеку поверх той, которая будет обрабатывать анализ пропускной способности каждого класса в этой библиотеке, которую мы будем называть ConnectorGripAnalysisLibrary.Имитация наследования с помощью расширения
По этому вопросу мы будем работать с классами: Screw
, Bolt
и Connector
. Оба Screw
и Bolt
наследуют от Connector
(который является абстрактным классом), и оба они реализованы в ConnectorLibrary.
Существует другой метод определения захвата для каждого класса в базовой библиотеке, который мне нужно реализовать. Итак, для обоих Bolt
и Screw
Мне нужно реализовать такой метод, как DoesPassGripTest(Board board)
. (Правление является только примерным параметром)
Если бы я собирался реализовать это в Connectorlibrary, я бы поставил DoesPassGripTest
в Connector
абстрактным методом и реализовал различные формулы в соответствующих производных классах.
Цель состоит в том, чтобы быть в состоянии иметь мой код работу, как это от ConnectorGripAnalysisLibrary:
[Test()]
public static void CheckScrewAndBoltGripTest()
{
Board board = new Board();
Bolt b = new Bolt();
Screw s = new Screw();
List<Connector> connectors = new List<Connector>()
connectors.add(b);
connectors.add(s);
foreach(var connector in connectors)
{
if(!connector.DoesPassGripTest(board));
throw new Exception("Grip Test Fails");
}
}
Я хочу, чтобы поддерживать «Открытый закрытый принцип» в ConnectorGripAnalysisLibrary, так что в случае нового коннектор добавляется в ConnectorLibary, никакая модификация библиотеки ConnectorGripAnalysisLibrary не требуется, кроме добавления нового класса. «Open for Extension, Closed for Modificaiton»
Но как я могу создать эту функциональность в GripAnalysisLibrary, которая построена поверх ConnectorLibrary. Есть ли способ сделать это?
Я не хочу, чтобы ConnectorLibrary содержала код и функциональность GripAnalysis. Библиотека ConnectorLibrary должна быть открыта, тогда как GripAnalysisLibrary будет запатентованной.
, что примерно через интерфейс, так что каждый тип реализует 'DoesPassGripTest' делать все, что ему нужно? – Plutonix
@Plutonix Как реализовать интерфейсы по расширению без получения нового типа? – jth41
Почему это необходимо * для расширения? – Plutonix