[英]Implementing Interface using extension methods in c#
我有一个界面:
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
)。
我不完全确定你要完成什么,但要回答你的问题
有没有办法使用扩展方法实现此接口?
没有。
但是,为了更加务实,如果你的目标只是在你有几个选择后编写你的方法:
public class MyClass:IMessager
{
public void ShowMessage()
{
Extensions.ShowMessage(this);
}
}
虽然正如评论中所指出的那样,这基本上违背了使用扩展方法的要点。 此外,还有“样板代码”,这样每次实现界面时都必须从方法中调用静态方法(不是非常干 )
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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.