.Net CLR如何在内部实现“接口”?

时间:2010-07-16 06:30:59

标签: c# interface clr internals

对.NET CLR如何在内部处理接口感到好奇?

Q1]当CLR遇到类似以下内容时会发生什么:

simple interface example.(以下同样使用。)

interface ISampleInterface
    {
        void SampleMethod();
    }

    class ImplementationClass : ISampleInterface
    {
        // Explicit interface member implementation: 
        public void SampleMethod()
        {
            // Method implementation.

        }

        static void Main()
        {
            //Declare an interface instance.
            ISampleInterface mySampleIntobj = new ImplementationClass();  // (A)
           // Call the member.
            mySampleIntobj.SampleMethod();

            // Declare an interface instance. 
            ImplementationClass myClassObj = new ImplementationClass();  // (B)
           //Call the member.
            myClassObj.SampleMethod();

        }
    }

Q2:在上面的示例中,(A)(B)如何区分?

问题3:Generic Interfaces处理方式不同吗?

(在问这些基本问题时感觉像个菜鸟......反正......)

总而言之。

2 个答案:

答案 0 :(得分:2)

这些代码位几乎没有差异。两者最终都调用相同的功能。通过类类型调用方法可能会有一些性能上的好处。

如果您想了解这些内容的实现方式,请查看Virtual Method Tables

有关更深入的信息,请参阅this

答案 1 :(得分:-5)

与直接使用类类型进行实例化相比,在创建对象引用时使用该接口被认为是更好的做法。这是对接口原理的编程。

这意味着您可以使用依赖注入等方式更改在运行时实现相同接口的具体类,甚至可以是反射。与编程到具体类型相比,如果编程到接口,则不需要更改代码。