接口如何以这种方式实例化

时间:2014-02-20 09:03:10

标签: c# oop 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);寻找指导。感谢

1 个答案:

答案 0 :(得分:6)

这就是COM的工作原理。您已将FooImpl声明为IFoo的coclass。 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