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