Поделиться через


Изменения, не поддерживаемые в режиме "Изменить и продолжить" 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);

  • добавление или удаление поля;

  • изменение типа поля.

См. также

Задачи

Практическое руководство. Применение изменений в режиме приостановки выполнения с помощью режима "Изменить и продолжить"

Другие ресурсы

Режим "Изменить и продолжить" (Visual Basic)