Изменения, не поддерживаемые в режиме "Изменить и продолжить" Visual Basic
Операция "Изменить и продолжить" позволяет остановить выполнение программы в режиме приостановки выполнения, внести изменения в исполняемый код и возобновить выполнение программы с учетом внесенных изменений. Изменения в объявляющем коде, меняющие общедоступную (public) структуру класса, в общем случае запрещены, но разрешено большинство возможных изменений в теле метода или свойства, а также в объявлениях со спецификатором доступа private в пределах класса. Операция "Изменить и продолжить" по возможности помечает запрещенный к изменению код светло-серым.
Если требуется внести изменение, которое не поддерживается операцией "Изменить и продолжить", следует остановить отладку, внести необходимые изменения и начать новый сеанс отладки.
Содержание раздела
В следующих подразделах описываются изменения, которые не поддерживаются операцией "Изменить и продолжить".
Изменения в теле метода или свойства
Неподдерживаемые изменения статических локальных переменных
- Удаление статической локальной переменной.
Неподдерживаемые изменения итерационных конструкций
Изменение условия цикла While, когда указатель инструкции указывает на условие.
Изменение нижней или верхней границы оператора For, когда указатель инструкции находится в выражении.
Добавление или удаление цикла Next, когда указатель инструкции используется в выражении перечислителя.
Добавление цикла For Each, когда указатель инструкции находится в теле цикла.
Изменение итератора цикла For Each, когда указатель инструкции находится в выражении перечислителя или в теле цикла.
Изменение выражения перечислителя цикла For Each, когда указатель инструкции находится в выражении перечислителя.
Неподдерживаемые изменения универсальных типов
- Изменения универсального метода — его самого или его тела — не поддерживаются. Разрешено добавлять, удалять или изменять экземпляр универсального типа или вызовы существующих универсальных методов.
Другие неподдерживаемые изменения
Изменение оператора вызова метода, находящегося в стеке вызовов.
Добавление блока Try...Catch, когда указатель инструкций находится в конце блока Catch или Finally.
Удаление блока Try...Catch, когда указатель инструкций находится в блоке Catch или Finally.
Добавление шести и более вложенных операторов Try вокруг текущего указателя инструкций.
Добавление блока Using вокруг текущего указателя инструкций.
Добавление блока SynchLock вокруг текущего указателя инструкций.
Добавление, удаление или изменение пользовательского блока #region.
Изменения в атрибутах
Операция "Изменить и продолжить" не поддерживает изменение атрибутов. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
определение, изменение или удаление класса атрибутов;
добавление атрибута;
изменение или удаление существующего атрибута.
Изменения в объявлениях классов
Операция "Изменить и продолжить" не допускает большинство изменений в объявлениях классов в режиме приостановки выполнения. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
создание нового класса;
переименование, удаление или изменение наследования существующего класса;
реализация нового интерфейса или удаление реализации интерфейса;
изменение любого из следующих модификаторов для класса: MustInherit, NotInheritable или Shared;
добавление, изменение или удаление состояния ComClass;
изменение модификатора доступа для класса;
изменение объявления любого универсального класса.
Изменения в объявлениях членов класса
Внесение изменений в объявления членов в режиме "Изменить и продолжить" в большинстве случаев невозможно. Например, в режиме приостановки выполнения невозможно изменить сигнатуру или уровень доступа члена; невозможно объявить новый метод или свойство с уровнем доступа, отличным от private; невозможно полностью удалять члены. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
затенение существующей переменной-члена путем объявления глобальной переменной или переменной-члена с таким же именем в блоке, содержащем текущий;
затенение статической локальной переменной путем объявления нового экземпляра внутри блока;
добавление нового свойства или метода с уровнем доступа, отличным от private. Разрешается добавление свойства или метода с уровнем доступа Private;
добавление нового поля, если только оно не является Private и нет ни одного вхождения имени поля в любой активный оператор;
добавление нового поля с уровнем доступа Private в любой класс, помеченный атрибутом SequentialLayout или ExplicitLayout;
добавление или удаление конструктора;
удаление обработчиков событий. Разрешается добавление обработчика события;
добавление нового перегруженного свойства или метода, если только они не Private и нет ни одного вхождения имени в любой активный оператор;
добавление или удаление предложения WithEvents для переменной-члена;
удаление члена;
изменение объявления свойства или метода, которое останавливает реализацию интерфейса;
изменение любого метода, использующего универсальные типы;
изменение сигнатуры или типа возвращаемых данных для свойства или метода с уровнем доступа, отличным от private;
переопределение или затенение члена в базовом классе;
изменение состояния MustInherit или NotOverridable у метода;
изменение модификаторов доступа для свойства или метода;
изменение типа поля или его состояния "только для чтения";
изменение поля с уровнем доступа public.
Изменения в параметрах компилятора
При использовании операции "Изменить и продолжить" в режиме приостановки выполнения невозможно изменить, добавить или удалить следующие параметры компилятора:
Option Strict
Option Explicit
Option Compare
Изменения в условной компиляции
В режиме "Изменить и продолжить" запрещено большинство изменений в директивах условной компиляции. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
добавление или удаление директив условной компиляции;
добавление, удаление или изменение выражения вычисления в операторе условной компиляции.
Изменения в константах
Возможности изменения констант в режиме "Изменить и продолжить" очень ограничены. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
определение новой константы, если только она не имеет уровень доступа private и нет ни одного вхождения имени константы в любой активный оператор;
изменение типа или значения константы;
удаление константы.
Изменения в объявлениях делегатов и событий
Операция "Изменить и продолжить" не допускает большинство изменений в делегатах и событиях в режиме приостановки выполнения. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
определение нового делегата;
изменение или удаление определения делегата;.
определение нового события;
удаление события.
Изменения в перечислениях
Операция "Изменить и продолжить" не допускает внесение изменений в перечисления (Enums) в режиме приостановки выполнения. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
определение нового Enum;
изменение базового типа для Enum;
добавление, изменение и удаление члена Enum;
изменение модификатора доступа для Enum.
Изменения во внешних объявлениях
В режиме "Изменить и продолжить" в общем случае невозможно изменить объявление внешнего метода. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
добавление или удаление внешних объявлений;
изменение сигнатуры или атрибутов маршалинга для внешнего объявления.
Изменения в импорте
Операция "Изменить и продолжить" не позволяет добавлять, изменять или удалять операторы Imports в режиме приостановки выполнения.
Изменения в определениях интерфейса
Зачастую разрешается вносить изменения в члены, реализующие интерфейс, но изменять фактическое определение интерфейса в режиме "Изменить и продолжить" в общем случае не позволяется. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
определение нового интерфейса;
добавление, изменение или удаление членов интерфейса;
удаление существующего интерфейса;
изменение модификатора доступа для интерфейса;
изменение иерархии наследования интерфейса;
Изменения в объявлениях модулей
Операция "Изменить и продолжить" не допускает большинство изменений в объявлениях модулей в режиме приостановки выполнения. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
создание нового модуля;
переименование или удаление существующего модуля;
изменение модификатора доступа для модуля.
Изменения в объявлениях членов модулей
С помощью операции "Изменить и продолжить" в режиме приостановки выполнения можно вносить различные изменения в члены модуля, в частности можно изменять свойства, методы и поля. Тем не менее некоторые изменения не поддерживаются. К числу важных изменений, не поддерживаемых операцией "Изменить и продолжить", относится добавление, удаление и изменение типа или сигнатуры членов с уровнем доступа, отличным от private.
В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
добавление нового члена, если только данный член не имеет тип доступа Private и нет ни одного вхождения имени в любой активный оператор;
удаление свойства или метода;
изменение сигнатуры свойства или метода с уровнем доступа, отличным от private;
изменение любого метода, использующего универсальные типы;
Изменение модификаторов доступа для свойства или метода, например изменение Public на Private;
удаление или изменение типа существующего поля.
Изменения в объявлениях вложенных типов
С помощью операции "Изменить и продолжить" в режиме приостановки выполнения в общем случае невозможно вносить изменения в объявления вложенных типов. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
добавление нового вложенного типа;
перемещение вложенного типа в другое пространство имен или тип.
Изменения в объявлениях структур
Операция "Изменить и продолжить" не допускает большинство изменений в объявлениях структур в режиме приостановки выполнения. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
создание новой структуры;
переименование или удаление существующей структуры;
реализация нового интерфейса или удаление реализации интерфейса;
изменение модификатора доступа для структуры.
Изменения в объявлениях членов структур
С помощью операции "Изменить и продолжить" в режиме приостановки выполнения можно вносить различные изменения в члены структуры (свойства, методы и поля). Тем не менее некоторые важные изменения (например, изменения в объявлении членов структуры) не поддерживаются. В частности, операцией "Изменить и продолжить" не поддерживаются следующие изменения:
добавление или удаление свойства или метода, включая методы конструктора (если только метод не является Private и нет ни одного вхождения имени поля в любой активный оператор);
изменение сигнатуры свойства или метода;
изменение любого метода, использующего универсальные типы;
изменение объявления свойства или метода, реализующего интерфейс;
изменение модификаторов доступа у свойства или метода (например, изменение Public на Private);
добавление или удаление поля;
изменение типа поля.