gpt4 book ai didi

.net - 如何在c#中定义接口(interface)的默认实现?

转载 作者:行者123 更新时间:2023-12-02 01:54:16 27 4
gpt4 key购买 nike

C# 中有一些黑魔法代码,您可以在其中定义接口(interface)的默认实现。

所以你可以写

var instance = new ISomeInterface();

有什么指点吗?

更新1:请注意,我并没有问这是否是一个好主意。到底怎么可能做到呢。

更新 2:致任何看到已接受答案的人。

  • “这应该仅仅被视为好奇。”来自马克·格拉维尔 "Newing up" Interfaces
  • “使用为 COM 互操作设计的工具来完成完全不同的事情是一个坏主意。这会使您的代码无法被下一个必须维护它的人理解”来自 Eric Lippert "Newing up" Interfaces
  • “虽然它可能有效,但如果理性编码人员在生产代码中发现它,则会将其重构为使用基类或依赖项注入(inject)。”来自 Stephen Cleary 在下面的评论中。

最佳答案

黑魔法来了:

class Program
{
static void Main()
{
IFoo foo = new IFoo("black magic");
foo.Bar();
}
}

[ComImport]
[Guid("C8AEBD72-8CAF-43B0-8507-FAB55C937E8A")]
[CoClass(typeof(FooImpl))]
public interface IFoo
{
void Bar();
}

public class FooImpl : IFoo
{
private readonly string _text;
public FooImpl(string text)
{
_text = text;
}

public void Bar()
{
Console.WriteLine(_text);
}
}

请注意,您不仅可以实例化接口(interface),还可以将参数传递给其构造函数:-)

关于.net - 如何在c#中定义接口(interface)的默认实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3271223/

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