【问题标题】:How to Implement Interface with Enum Specific to Derived Class in C#?如何在 C# 中使用特定于派生类的枚举实现接口?
【发布时间】:2018-10-17 20:47:22
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么你的枚举不能放在它们自己的文件中而不是在类中定义?还是我误会了

标签: c# inheritance enums interface


【解决方案1】:

尝试使用泛型:

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

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

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

这意味着您不能拥有MyInterface 对象的列表,但可以拥有MyInterface&lt;SomePin&gt; 对象的列表。这是有道理的——如果每个实现的枚举都不同,那么给定一个MyInterface,你怎么知道要传递什么值?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 2016-09-03
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2020-11-28
    • 2011-01-13
    相关资源
    最近更新 更多