Что делает Виртуальный, и Переопределение делают позади сцены

Это зависит, как Вы определяете 'безопасный'.

Вы правы в этом, обычный пользователь не будет видеть его.

Однако это - определенно плохая практика; если Ваш сайт поставлен под угрозу, к чему еще эти пароли предоставят доступ? Я сказал бы как минимум, что необходимо хранить хеш пароля, не простой текст.

7
задан Athiwat Chunlakhan 21 August 2009 в 06:17
поделиться

3 ответа

Я не могу дать вам какое-либо представление о том, как это делается в IL, но основная теория проста.

Когда компилятор видит объявление виртуального метода , вместо этого присоединения метода к классу, он добавляет его в так называемую vtable (виртуальную таблицу методов) для этого класса, которая содержит указатели на функции.

Теперь, поскольку vtable является частью класса, он наследуется его подклассами и, следовательно, наследуются виртуальные методы. Теперь идет переопределение бит. Когда компилятор видит переопределение в объявлении метода, он ищет vtable , находит метод для переопределения и изменяет указатель функции так, чтобы он указывал на новое определение.

] Таким образом,

15
ответ дан 6 December 2019 в 07:51
поделиться

Вам не нужно заходить в IL - виртуальное и переопределение охватывают хорошо известную концепцию объектной ориентации, известную как полиморфизм . Фактически, когда осуществляется доступ к полиморфному методу или свойству, то, какой метод / свойство на самом деле применяется, определяется только во время выполнения. Под капотом, в основном, правильный метод (в случае свойства, это также метод) определяется путем доступа к таблице виртуальных методов - таблице поиска для поиска правильного метода на основе тип среды выполнения.

4
ответ дан 6 December 2019 в 07:51
поделиться

Если вас интересует IL, используйте ildasm.exe для просмотра скомпилированной программы (DLL или EXE). Вы увидите, что методы, которые вы помечаете как «виртуальные», просто помечаются как «виртуальные» в IL.

Волшебство происходит во время выполнения. CLR создает «таблицу распределения методов» (или «таблицу виртуальных методов»), которую она использует для поиска методов вашего класса в памяти. Чтобы разрешить полиморфизм, когда одно и то же имя метода означает разные вещи в зависимости от типа среды выполнения, для виртуальных методов требуется дополнительный поиск. (Можно сказать, что они называются «виртуальными» методами именно потому, что они выбраны «в силу» того, над чем они работают, - но см. Комментарии @Pavel.) Джо Даффи выразился так:

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

Это основы. Don Box - хорошее чтение, если вы действительно хотите пойти дальше.

4
ответ дан 6 December 2019 в 07:51
поделиться
Другие вопросы по тегам:

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