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


При копировании значения ByRef параметра <имяПараметра> обратно в соответствующий аргумент тип <имяТипа1> сужается в тип <имяТипа2>

Обновлен: Ноябрь 2007

Copying the value of 'ByRef' parameter '<parametername>' back to the matching argument narrows from type '<typename1>' to type '<typename2>'

Процедура вызывается с аргументом, расширяющим соответствующий тип параметра, а преобразование параметра к аргументу является сужающим.

При определении класса или структуры можно определить один или несколько операторов преобразования для преобразования типа класса или структуры к другим типам. Можно также определить операторы обратного преобразования для преобразования других типов обратно к типу класса или структуры. При использовании типов класса или структуры в вызове процедуры Visual Basic может использовать эти операторы преобразования, чтобы преобразовать их к типу соответствующего параметра для этой процедуры.

При передаче аргумента ByRefVisual Basic иногда копирует его значение в локальную переменную в процедуре вместо передачи ссылки. В таком случае, когда процедура возвращает результат, Visual Basic должен скопировать значение локальной переменной обратно в аргумент в коде вызова.

Если значение аргумента ByRef копируется в процедуру и аргумент и параметр имеют один и тот же тип, то преобразование не требуется. Но если типы различны, то Visual Basic должен выполнить преобразование в обоих направлениях. Если один из типов является типом соответствующего класса или структуры, то Visual Basic должен выполнить его преобразование к другому типу и обратное преобразование. Если одно их этих преобразований является расширяющим, то обратное преобразование может быть сужающим.

Идентификатор ошибки: BC32053

Чтобы исправить эту ошибку

  • Если это возможно используйте аргумент вызова того же типа, что и параметр процедуры, чтобы в Visual Basic не требовалось выполнять какие-либо преобразования.

  • Если необходимо вызвать процедуру с аргументом, тип которого отличается от типа параметра, но нет необходимости возвращать результат в аргумент вызова, то определите параметр как ByVal, а не ByRef.

  • Если требуется возвращать значение в аргументе, определите оператор обратного преобразования как Widening, если это возможно.

См. также

Задачи

Практическое руководство. Определение оператора

Практическое руководство. Определение оператора преобразования

Основные понятия

Процедуры в Visual Basic

Параметры и аргументы процедуры

Передача аргументов по значению или по ссылке

Процедуры операторов

Расширяющие и сужающие преобразования

Ссылки

Оператор Operator

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

Преобразование типов в Visual Basic