Mas*_*oud 5 c# extension-methods interface
我有一个界面:
public interface IMessager
{
void ShowMessage();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用扩展方法实现此接口?
public static class Extensions
{
public static void ShowMessage(this MyClass e)
{
Console.WriteLine("Extension");
}
}
Run Code Online (Sandbox Code Playgroud)
以及实现它的类:
public class MyClass:IMessager
{
public void ShowMessage()
{
ShowMessage(); // I expect that program write "Extension" in console
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我运行程序时,我得到了System.StackOverflowException.
dav*_*v_i 10
您发布的代码只是一种递归调用自身的方法(因此StackOverflowException).
我不完全确定你要完成什么,但要回答你的问题
有没有办法使用扩展方法实现此接口?
没有.
但是,为了更加务实,如果你的目标只是在你有几个选择后编写你的方法:
public class MyClass:IMessager
{
public void ShowMessage()
{
Extensions.ShowMessage(this);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然正如评论中所指出的那样,这基本上违背了使用扩展方法的要点.此外,还有"样板代码",这样每次实现界面时都必须从方法中调用静态方法(不是非常干)
public abstract class MessengerBase
{
public void ShowMethod() { /* implement */ }
}
public class MyClass : MessengerBase {}
...
new MyClass().ShowMethod();
Run Code Online (Sandbox Code Playgroud)
这个问题是你不能从多个类继承.
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2902 次 |
| 最近记录: |