.NET, как реализованы интерфейсы через статические методы?
От: Аноним  
Дата: 23.06.14 10:54
Оценка:
Мне понятно, как работает таблица виртуальных функций, и как вызывается виртуальный метод потомка через указатель на базовый класс.
Но не понятно, как в .NET работают интерфейсы. Можно вызвать метод класса через указатель на интерфейс, и этот метод может быть совсем не виртуальным.
Как это устроено внутри?
Re: .NET, как реализованы интерфейсы через статические методы?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.06.14 11:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мне понятно, как работает таблица виртуальных функций, и как вызывается виртуальный метод потомка через указатель на базовый класс.

А>Но не понятно, как в .NET работают интерфейсы. Можно вызвать метод класса через указатель на интерфейс, и этот метод может быть совсем не виртуальным.
А>Как это устроено внутри?

Хранится interface map, фактически аналог vtbl под каждый реализуемый интерфейс. Соответственно вызовы через ссылку на интерфейс компилируется в обращение к конкретному map.
Re[2]: .NET, как реализованы интерфейсы через статические методы?
От: Аноним  
Дата: 23.06.14 11:43
Оценка:
Спасибо, понятно, логично.
Re: .NET, как реализованы интерфейсы через статические методы?
От: Sinix  
Дата: 23.06.14 11:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как это устроено внутри?


Как я понимаю, речь шла не о статических, а о non-virtual методах.

Компилятор или объявляет их виртуальными (если базовый класс и класс, реализующий интерфейс, находятся в одной сборке), или генерит explicit interface implementation. Чуть более подробно тут.

Если интересуют совсем низкоуровневые подробности определения нужного метода в рантайме — см раздел Dispatching Static and Interface Methods в Pro .NET Performance от Sasha Goldshtein (очень рекомендую всю книгу целиком).
Re[2]: .NET, как реализованы интерфейсы через статические методы?
От: Аноним  
Дата: 23.06.14 12:30
Оценка:
Да, все правильно, о "не виртуальных методах", а не статических, конечно. Спасибо.
Re: .NET, как реализованы интерфейсы через статические методы?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 23.06.14 18:31
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Но не понятно, как в .NET работают интерфейсы. Можно вызвать метод класса через указатель на интерфейс, и этот метод может быть совсем не виртуальным.


Компилятор превратит метод sealed virtual, или (если это невозможно) создаст дополнительный sealed virtual proxy-метод.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.