添加函数到接口而不在所有类中实现

时间:2014-11-10 07:31:33

标签: c# interface

我的问题是,在C#中如果我想在接口中添加另一个函数但我不想在实现该接口的所有类中实现该函数。我怎样才能做到这一点?例如

接口包含5个方法,该接口在20个类中实现。现在我想在同一个接口中添加另一个方法,但我想只在5个类而不是在15个类中实现该函数?我怎么能做到这一点?

谢谢

3 个答案:

答案 0 :(得分:6)

public interface IWidelyUsed { ... }

这是由这20个班级实施的

public interface IParticularCase : IWidelyUsed { ... }

这将有另一个功能

答案 1 :(得分:3)

简短回答:将大界面定义分成两个更专业的界面。

背后的一些理论: Interface segregation principle作为SOLID

的一部分

答案 2 :(得分:1)

这与界面的本质相矛盾。如果接口IBlob定义void DoAThing(),则意味着任何实现它的类都知道如何做事。这是合同。如果你想让你的某些Blobs能够做一件事而有些人却做不到,那么你实际上是在说“做一件事”不是Blobs的一个特征。

现在,在某些情况下, 希望所有IBlob都要公开DoAThing,但您不希望在那里发生任何事情。您需要一个默认的null实现。对于这些情况,我们可以在具体类和接口之间添加一个抽象基类:

interface IBlob
{
     void DoAThing();
}

abstract class AbstractBlob : IBlob
{
     virtual void DoAThing() { } // nothing happening.
}

class BlobThatDoesThings : AbstractBlob
{
     override void DoAThing() { DoSomething(); }
}

class RegularBlob : AbstractBlob
{
   // Inherits the abstract blob's implementation.
}

但是在其他情况下,你真的只需要一些blob来实现一个方法,使用BlackBear提到的in his answer提到的接口专门化方法。