使用c#中的扩展方法实现接口

时间:2014-03-26 10:04:47

标签: c# interface extension-methods

我有一个界面:

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

1 个答案:

答案 0 :(得分:10)

您发布的代码只是递归调用自身的方法(因此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();