Иллюстрированный самоучитель по VB.NET



              


Интерфейсы - часть 2


  • при наличии подобных обязательств компилятор может использовать полиморфизм так же, как это делается при наследовании.

    При вызове метода, реализованного в составе интерфейса, компилятор .NET еще на стадии компиляции может вычислить вызываемый метод на основании сигнатуры и типа класса (это называется ранним связыванием). Этот факт объясняет возможность использования полиморфизма при реализации интерфейсов.

    А теперь подумайте, что произойдет, если:

  • вы не будете связаны обязательством на поддержку метода с заданной сигнатурой в результате реализации интерфейса;

  • ваш класс не входит в иерархию наследования, в которой VB .NET сможет найти метод с нужной сигнатурой.

    Происходит следующее: в режиме жесткой проверки типов (Option StrictOn) программа вообще не будет компилироваться. Если этот режим отключить, умный компилятор .NET поймет, что вызов метода класса не удастся заменить в откомпилированном коде неким подобием простого вызова функции. Таким образом, компилятору придется сгенерировать значительно больший объем кода. Фактически он должен во время выполнения программы вежливо спросить у объекта, поддерживает ли он метод с указанной сигнатурой, и если поддерживает — не будет ли он возражать против его вызова? Подобное решение обладает двумя характерными особенностями, из-за которых оно работает значительно медленнее и гораздо чаще приводит к возникновению ошибок:

  • Необходимо предусмотреть обработку ошибок на случай непредвиденных ситуаций.

  • Поскольку компилятор на стадии компиляции не может определить, по какому адресу следует передать управление в блоке памяти, занимаемом объектом, ему приходится полагаться на косвенные методы передачи управления на стадии выполнения.

    Описанный процесс называется поздним связыванием (late binding). Он не только значительно уступает раннему связыванию по скорости, но и вообще не разрешен при включенном режиме Option Strict за исключением позднего связывания, основанного на применении рефлексии.




    Содержание  Назад  Вперед