使用c#中的扩展方法实现接口
本文关键字:方法 实现 接口 扩展 使用 | 更新日期: 2023-09-27 17:53:22
我有一个接口:
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
你发布的代码只是一个递归调用自己的方法(因此StackOverflowException
)。
我不完全确定你想要完成什么,但我要回答你的问题
号是否有任何方法来实现这个接口使用扩展方法?
如果你的目标是只在你有几个选项的时候编写你的方法,那么要更务实一点:
1。显式调用扩展名
public class MyClass:IMessager
{
public void ShowMessage()
{
Extensions.ShowMessage(this);
}
}
虽然在注释中已经指出,但这基本上违背了使用扩展方法的意义。此外,还有"锅炉板代码";这样,每次实现接口时,都必须从方法内部调用静态方法(不是很DRY)
2。使用抽象类代替接口
public abstract class MessengerBase
{
public void ShowMethod() { /* implement */ }
}
public class MyClass : MessengerBase {}
...
new MyClass().ShowMethod();
这样做的问题是,你不能从多个类继承。
3。在接口上使用扩展
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();