我有一个界面:
public interface IMessager
{
void ShowMessage();
}
有没有办法使用扩展方法实现这个接口?
public static class Extensions
{
public static void ShowMessage(this MyClass e)
{
Console.WriteLine("Extension");
}
}
以及实现它的类:
public class MyClass:IMessager
{
public void ShowMessage()
{
ShowMessage(); // I expect that program write "Extension" in console
}
}
但是当我运行程序时,我得到了System.StackOverflowException
。
答案 0 :(得分:10)
您发布的代码只是递归调用自身的方法(因此StackOverflowException
)。
我不完全确定你要完成什么但是要回答你的问题
有没有办法使用扩展方法实现这个接口?
没有
尽管如此,如果你的目标只是在你有几个选择后编写你的方法,那就更加务实了:
public class MyClass:IMessager
{
public void ShowMessage()
{
Extensions.ShowMessage(this);
}
}
虽然正如评论中指出的那样,这基本上使得使用扩展方法失败了。此外,还有#锅炉板代码"这样每次实现界面时都必须从方法中调用静态方法(不是很DRY)
public abstract class MessengerBase
{
public void ShowMethod() { /* implement */ }
}
public class MyClass : MessengerBase {}
...
new MyClass().ShowMethod();
这个问题是你不能从多个类继承。
public interface IMessenger { /* nothing special here */ }
public class MyClass : IMessenger { /* also nothing special */ }
public static class MessengerExtensions
{
public static void ShowMessage(this IMessenger messenger)
{
// implement
}
}
...
new MyClass().ShowMessage();