是否可以为C#接口定义"共享"方法?

Jay*_*645 3 c# inheritance interface .net-3.5

说我有4类:Foo,Bar,Qux,和Baz.我也有一个界面IFubar.

类如此继承:

Bar : Foo, IFubar

Qux : Baz, IFubar
Run Code Online (Sandbox Code Playgroud)

在这些方法IFubar几乎总是用相同方式实现,不管是什么类继承他们.理想的解决办法是有实施IFubar本身,但我不能改变IFubar的一类,因为BarQux 要继承FooBaz分别,和C#不支持多重继承.

是否有一种简单的方法可以在界面中使用某种"默认"逻辑,因为缺少更好的术语?现在我的"实现"只是在另一个类中调用静态方法,这允许我在那里执行所有逻辑并最小化代码重复.不过,我觉得这不是一个优雅的解决方案.

理想情况下,我希望有一个派生自某个类的类,IFubar并且让它自动获得相同的IFubar实现,而无需复制和粘贴.我很确定C#不可能做到这一点,但我想确定一下.

老实说,这只是一个轻微的烦恼,我不得不一遍又一遍地复制和粘贴相同的代码,但我一直在想一个更优雅的解决方案,我不能.

这将全部用于Unity3D引擎中使用的东西,所以我主要限于.NET 3.5中的东西.

有没有人有更好的解决方案或建议?

Mar*_*ell 5

"几乎总是"是问题所在.如果它是"总是",那么"扩展方法"将是理想的:

public static class FubarExtensions
{
    public static void SomeMethod(this IFubar obj) { ... }
}
Run Code Online (Sandbox Code Playgroud)

如果你需要"几乎",你可能需要多态性才能保证它的可靠性.在这种情况下,使用静态方法进行默认实现可能是您的最佳选择,即

IFubar.SomeMethod(...)
{
    Fubar.SomeMethodDefault(this, ...);
}
Run Code Online (Sandbox Code Playgroud)

要么:

public virtual void SomeMethod(...)
{
    Fubar.SomeMethodDefault(this, ...);
}
Run Code Online (Sandbox Code Playgroud)

(或任何类似的组合)