gpt4 book ai didi

c# - 在 C# 中使用扩展方法实现接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 22:26:28 30 4
gpt4 key购买 nike

我有一个接口(interface):

public interface IMessager
{
void ShowMessage();
}

有没有办法使用扩展方法来实现这个接口(interface)?

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)。

我不完全确定你想完成什么但回答你的问题

Is there any way to implement this interface using extension methods?

没有。

如果您的目标是只在有几个选项时才编写您的方法,那么对此要更务实一点:

1。显式调用扩展

public class MyClass:IMessager
{
public void ShowMessage()
{
Extensions.ShowMessage(this);
}
}

尽管如评论中所指出的,这基本上违背了使用扩展方法的要点。此外,仍然存在“样板代码”,因此每次实现接口(interface)时都必须从方法内部调用静态方法(不是很 DRY )

2。使用抽象类而不是接口(interface)

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();

关于c# - 在 C# 中使用扩展方法实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22657484/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com