6

只是好奇 .NET CLR 如何在内部处理接口?

Q1] 当 CLR 遇到以下情况时会发生什么:

简单的界面示例。(下同。)

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)是如何区分的?

Q3:通用接口的处理方式不同吗?

(在问这些基本问题时感觉像个菜鸟......无论如何......)

谢谢大家。

4

2 回答 2

2

这些代码几乎没有区别。两者最终都调用了相同的函数。通过类类型调用方法可能会带来较小的性能优势。

如果您想了解这些东西是如何实现的,请查看Virtual Method Tables

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

于 2010-07-16T13:51:44.760 回答
-5

与使用类类型直接实例化它相比,在创建对象引用时使用接口被认为是一种更好的做法。这属于对接口的编程原则。

这意味着您可以使用依赖注入之类的东西甚至可能是反射来更改在运行时实现相同接口的具体类。如果您对接口进行编程,而不是对具体类型进行编程,则不需要更改您的代码。

于 2010-07-18T14:19:46.423 回答