gpt4 book ai didi

c# - 如何以这种方式实例化接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:37 25 4
gpt4 key购买 nike

从一个 url 我看到人们可以像这样实例化接口(interface)

class Program
{
static void Main(string[] args)
{
var foo = new IFoo(1);
foo.Do();
}
}

[
ComImport,
Guid("C906C002-B214-40d7-8941-F223868B39A5"),
CoClass(typeof(FooImpl))
]
public interface IFoo
{
void Do();
}

public class FooImpl : IFoo
{
private readonly int i;

public FooImpl(int i)
{
this.i = i;
}

public void Do()
{
Console.WriteLine(i);
}
}

怎么可能这样写 var foo = new IFoo(1); 寻求指导。谢谢

最佳答案

这就是 COM 的工作原理。您已将 FooImpl 声明为 IFoo 的组件类。 new IFoo(1); 将被编译为 new FooImpl(1);

根据 C# 规范的 §17.5,System.Runtime.InteropServices 命名空间下的属性可能会违反所有规则。这是 Microsoft 的 C# 实现所特有的。

Marc Gravell 和 Jon Skeet 对此有非常好的博客文章:Who says you can’t instantiate an interface?Faking COM to fool the C# compiler

关于c# - 如何以这种方式实例化接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21902878/

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