【发布时间】:2015-07-31 01:37:29
【问题描述】:
是否可以在 C# 中定义具有默认实现的接口? (这样我们就可以定义一个实现该接口的类,而无需实现该特定的默认方法)。
我知道扩展方法(例如在this link 中解释)。但这不是我的答案,因为具有如下的方法扩展,编译器仍然抱怨在 MyClass 中实现 MyMethod:
public interface IMyInterface
{
string MyMethod();
}
public static class IMyInterfaceExtens
{
public static string MyMethod(this IMyInterface someObj)
{
return "Default method!";
}
}
public class MyClass: IMyInterface
{
// I want to have a default implementation of "MyMethod"
// so that I can skip implementing it here
}
我问这个是因为(至少据我所知)在 Java 中可以做到这一点(参见here)。
PS:有一个带有某种方法的抽象基类也是不是我的答案,因为我们在C#中没有多重继承,它不同于拥有一个接口的默认实现(如果可能!)。
【问题讨论】:
-
Java 最近通过在接口中定义实现重新引入了多重继承,正如您所说。这确实具有讽刺意味,因为 Java 在引入接口方面发挥了重要作用,首先是解决多继承的可怕问题。虽然 C# 还没有这样做,所以单继承(如果你真的必须使用继承)仍然是所有 C# 支持..
-
这可能会在 C# 8 中发生变化,请参阅GitHub 上的讨论
-
此功能已经在 c# 的预览版中 - devblogs.microsoft.com/dotnet/…
-
@DavidArno 大多数来自“经典”多重继承的问题是由于共享状态。默认接口实现不会引入任何新状态。