Как .Net CLR реализует «Интерфейс» внутри? - PullRequest
6 голосов
/ 16 июля 2010

Просто интересно, как .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: Общие интерфейсы обрабатываются по-разному?

(Чувствуй себя нубом, когда задаешь такие базовые вопросы ... в любом случае ....)

Спасибо всем.

Ответы [ 2 ]

2 голосов
/ 16 июля 2010

Практически нет различий в этих битах кода.Оба в конечном итоге вызывают одну и ту же функцию.При вызове метода через тип класса могут быть незначительные преимущества в производительности.

Если вы хотите узнать, как реализованы эти вещи, взгляните на Таблицы виртуальных методов .

* 1006.* Для получения более подробной информации см. this .
0 голосов
/ 18 июля 2010

Использование интерфейса при создании ссылки на объект считается лучшей практикой по сравнению с непосредственным созданием его экземпляра с типом класса.Это относится к программированию по принципу интерфейса.

Это означает, что вы можете изменить конкретный класс, который реализует тот же интерфейс во время выполнения, используя что-то вроде внедрения зависимости или даже может быть отражением.Ваш код не будет нуждаться в изменении, если вы программируете на интерфейс по сравнению с программированием на конкретный тип.

...