В C # вы можете использовать ключевое слово implicit , чтобы определить неявный пользовательский оператор преобразования типов.
В VB.NET вы можете определить оператор преобразования CType , который будет явно преобразовывать определенный пользователем тип в другой тип.
Есть ли способ объявить оператор неявного преобразования в VB.NET?
Кажется, я не могу найти какую-либо информацию по этому вопросу ...
Ответ
Я нашел свой ответ в документации MSDN для оператора Widening
. По-видимому, оператор CType Widening
«вызывается» для неявных преобразований, тогда как оператор CType Narrowing
вызывается для явных преобразований.
Сначала я думал, что эта документация неверна, поскольку во время тестирования у меня возникла исключительная ситуация. Я перепроверил и обнаружил что-то очень странное. Функция, которую я реализовал как расширяющий оператор преобразования, прекрасно работает, когда неявное приведение выполняется с помощью оператора "=".
Например, следующее неявно приведёт тип Something
к MyClass
. Он вызывает мою реализацию преобразования Widening
правильно, и все работает без ошибок:
Dim y As Something
Dim x As MyClass = y
Однако, если неявное приведение выполняется в цикле foreach
, оно не работает.
Например, следующий код вызовет исключение (" Невозможно привести объект типа 'Something' к типу 'MyClass' "), когда тип Something
неявно приведен к MyClass
в цикле For Each
:
Dim anArrayOfSomethingTypes() As Something = getArrayOfSomethings()
For Each x As MyType In anArrayOfSomethingTypes
....
Next
Любое понимание этого очень ценится.