如何在C#中使用特定于派生类的枚举实现接口?

时间:2018-10-17 20:47:22

标签: c# inheritance enums interface

我正在尝试编写一个接口,例如...

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

REGISTERPIN都是枚举。我遇到的问题是REGISTER是在我的MyBaseClass中定义的,而PIN是在MyDerivedClass中定义的。我可以在界面中使用类似MyBaseClass.REGISTER的东西,但这不适用于PINMyBaseClass的每个派生对PIN都有不同的枚举。我发现this other answer on SO似乎可以部分解决问题,但是目前尚不清楚我应该如何在MyDerivedClass中实现该功能。有人对此有解决方案吗?

1 个答案:

答案 0 :(得分:3)

尝试使用泛型:

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

在每个派生类中实现它时,必须告诉它pin枚举的类型是什么:

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

这意味着您不能拥有MyInterface对象的列表,但是可以拥有MyInterface<SomePin>对象的列表。这很有意义-如果每种实现的枚举都不同,那么给定MyInterface,您如何知道要传递的值?