无法将代码放入接口的解决方法

Pat*_*shu 5 c# interface

假设我有一个许多不同类实现的接口:

public interface IHaveObjects
{
    object firstObject();
}
Run Code Online (Sandbox Code Playgroud)

(注意:我不能使它成为一个抽象基类,因为IHaveObjects的实现者可能已经有了一个基类.)

现在我想在接口中添加一个新方法,这样接口的一个实现者就可以有特殊的行为.理想情况下我会做这样的事情:

public interface IHaveObjects
{
    object firstObject();
    object firstObjectOrFallback()
    {
        return firstObject();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后转到接口的那个实现者并给它覆盖:

public class ObjectHaverPlus : IHaveObjects
{
    public override object IHaveObjects.firstObjectOrFallback()
    {
        return firstObject() ?? getDefault();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是它是在C#禁止在接口中提供的方法的身体,我想避免去的每一个实施者IHaveObjects在的定义下降firstObjectOrFallback().(想象一下,如果有数百或数千)

有没有办法在没有大量复制粘贴的情况下执行此操作?

Tom*_*tom 2

引入第二个继承自 IHaveObjects 的接口怎么样?

您只需更改这些类,这些类需要新接口和新方法。

这看起来像:

  interface I1
    {
        void Method1();
    }

    interface I2 : I1
    {
        void Method2();
    }
Run Code Online (Sandbox Code Playgroud)