如何接口可以实例化这样(How interface can be instantiate this

2019-10-19 09:26发布

从URL我看到人们可以实例接口这样的方式

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); 寻找指引。 谢谢

Answer 1:

这就是COM是如何工作的。 你已经声明FooImplIFoo的组件类。 new IFoo(1); 将被编译到new FooImpl(1);

按照C#规范§17.5,下属性System.Runtime.InteropServices命名空间可以打破所有规则。 这是专门针对微软的C#实现。

马克Gravell和乔恩斯基特对此真的很不错的博客文章: 谁说你不能实例化的界面? 并伪造COM愚弄C#编译器



文章来源: How interface can be instantiate this way
标签: c# oop interface