Как.Net CLR реализует “Интерфейс” внутренне?

Просто любопытный на предмет того, как.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: Универсальные Интерфейсы рассматривают по-другому?

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

Спасибо все.

6
задан Amitd 18 July 2010 в 12:21
поделиться

2 ответа

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

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

Для получения более подробной информации см. это .

2
ответ дан 18 December 2019 в 05:10
поделиться

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

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

-5
ответ дан 18 December 2019 в 05:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: