【问题标题】:Interface is forceing abstract class to implement its functions接口强制抽象类实现其功能
【发布时间】:2010-10-15 05:04:11
【问题描述】:

我有一个实现 3 个接口的抽象类。

 public abstract class ServiceBaseCore<Entity, EntityKey> : MarshalByRefObject, IComponentService, IEntityProvider<Entity, EntityKey>
    where Entity : IEntityId<EntityKey>, new()
    where EntityKey : IEntityKey, new()
{
 // Provided functionality/body to some methods of interface
}

问题:我收到错误消息,我的抽象类没有为接口的函数提供实现(定义/主体),而我读到的是“如果一个类是抽象的,那么就不需要向所有人提供主体/其实现的接口的任何功能”。

注意:代码是由 codeSmith 生成的,即使它显示错误。

请告诉我我哪里错了,我错过了什么。

谢谢

【问题讨论】:

  • 只需要在抽象类中将接口方法标记为抽象即可。

标签: c# interface abstract-class


【解决方案1】:

只要创建一些抽象函数,编译器就会停止抱怨:

public abstract void MyMethodDeclaredInTheInterface();

编辑:为了加快这个过程,只需移动抽象类中接口名称上的插入符号,然后 ctrl + 。并选择“实现接口YourInterface”。 然后在 NotImplementedException 上进行一点搜索和替换就可以了。

【讨论】:

  • 大约有 244 个这样的功能(显示错误)请给我任何想法,以便我可以快速完成
  • @Rajesh Rolen:如果您在一个类型中有 244 个函数,也许您应该考虑将其拆分为多个类型。见 SRP en.wikipedia.org/wiki/Single_responsibility_principle
  • @Brian Rasmussen:不,只要名称正确,有 244 个方法就可以了。例如从 Method1 到 Method244 :-)
【解决方案2】:

为接口创建抽象方法。否则,该类实际上不一定以任何方式实现这些方法,即使派生类可能(派生版本将无法通过 vtables 对基类可用,因此无法履行接口契约)。这将违反接口背后的理念。

注意:已经很晚了,我很累,所以我的理由可能是错误的。但是为接口所需的方法添加抽象方法会解决这个问题。

【讨论】:

    【解决方案3】:

    您应该能够右键单击接口名称(靠近MyClass : IMyInterface)以查看上下文菜单,然后选择“实现接口”。 Visual Studio 将创建满足接口所需的所有方法和属性。

    【讨论】:

      【解决方案4】:

      您可以尝试一些 IDE 来节省您的大量时间。我很清楚,Eclipse 可以自动执行此操作。

      【讨论】:

        猜你喜欢
        • 2012-10-08
        • 2012-07-17
        • 2014-08-27
        • 2012-01-20
        • 1970-01-01
        • 1970-01-01
        • 2017-11-27
        • 2014-08-18
        • 2014-06-30
        相关资源
        最近更新 更多