2010-07-16 1 views
6

Просто интересно, как .NET CLR обрабатывает интерфейсы внутри?Как .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) дифференцированный?

Q3: Есть Generic Interfaces обрабатываются по-разному?

(Почувствуйте, как нуб, задавая простые вопросы, как это ... в любом случае ....)

Thx все.

+0

Поскольку это отчасти ответ, я оставлю его здесь. Чтобы начать с кода mySampleIntobj.SampleMethod(); и myClassObj.SampleMethod(); может вызывать два разных метода. Первый вызовет любые явно реализованные методы, соответствующие вызову, второй - нет. только в том случае, если нет явного сопоставления методов, они вызовут тот же метод –

+0

Скомпилирует ли это? AFAIK, вы должны иметь открытый 'SampleMethod()' для вызова (B). – Humberto

+0

о, да, жаль..отредактировано/исправлено сейчас :) thx :) – Amitd

ответ

2

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

Если вы хотите, чтобы эти вещи были реализованы, взгляните на Virtual Method Tables.

Для получения более глубокой информации см. this.

+0

wow 2-я ссылка кажется очень сложной для понимания :) – Amitd

+0

не после прочтения 10 раз. –

+0

прочитал его трижды и до сих пор не получает его :) ..i продолжаю пытаться;) – Amitd

-5

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

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

+0

Это кажется лучшим объяснением программирования интерфейсу http://stackoverflow.com/questions/1848442/what-exactly-is-interface-based-programming – Amitd

+0

В основном исправлено, но не по теме. Не отвечает на вопрос. Downvoted. –

Смежные вопросы