Как реализовать интерфейс с Enum, специфичным для производного класса в C #? - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь написать интерфейс, такой как ...

interface MyInterface
{
    MyObject Set(REGISTER register, PIN pin);
}

И REGISTER, и PIN являются перечислениями.Проблема, с которой я сталкиваюсь, заключается в том, что REGISTER определено в моем MyBaseClass, а PIN определено в MyDerivedClass.Я могу жить с использованием чего-то вроде MyBaseClass.REGISTER в интерфейсе, но это не сработает для PIN.Каждый вывод MyBaseClass будет иметь различное перечисление для PIN.Я нашел этот другой ответ на SO , который, кажется, частично решает проблему, но не ясно, как мне затем реализовать эту функцию в MyDerivedClass.У кого-нибудь есть решение для этого?

1 Ответ

0 голосов
/ 17 октября 2018

Попробуйте использовать дженерики:

interface MyInterface<TPin>
{
    MyObject Set(Register register, TPin pin);
}

Когда вы реализуете его в каждом производном классе, вы должны сказать ему, каков тип enum pin:

class MyImplementation : MyInterface<MyPin>
{
    MyObject Set(Register register, MyPin pin)
    {
        // ...
    }
}

Это означаетчто у вас не может быть списка MyInterface объектов, но у вас может быть список MyInterface<SomePin> объектов.И это имеет смысл - если перечисление различно для каждой реализации, а затем получить MyInterface, как вы узнаете, какие значения передать ему?

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