programing

VB에서 암시적 변환 연산자를 정의하는 방법이 있습니까?NET?

padding 2023. 5. 8. 21:56
반응형

VB에서 암시적 변환 연산자를 정의하는 방법이 있습니까?NET?

C#에서 implicit 키워드를 사용하여 implicit 사용자 정의 형식 변환 연산자를 정의할 수 있습니다.

VB.NET에서 사용자 정의 유형을 다른 유형으로 명시적으로 변환하는 CType 변환 연산자를 정의할 수 있습니다.

VB에서 암시적 변환 연산자를 선언하는 방법이 있습니까?NET?

이에 대한 정보를 찾을 수가 없습니다.


정답.

저는 운영자를 위한 MSDN 문서에서 제 답변을 찾았습니다.보아하니 C타입이Widening연산자는 암시적 변환에 대해 "호출"되지만 CType 연산자는 명시적 변환에 대해 호출됩니다.

처음에는 테스트 중에 예외가 발생했기 때문에 이 문서가 잘못되었다고 생각했습니다.다시 테스트해보니 아주 이상한 점이 있었습니다.확장 변환 연산자로 구현한 기능은 "=" 연산자를 사용하여 암시적 캐스트를 수행할 때 잘 작동합니다.

예를 들어, 다음은 암시적으로 다음을 캐스팅합니다.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

이것에 대한 어떠한 통찰도 대단히 감사합니다.

VB.NET에서 확폭구간 CType 연산자를 사용하여 암시적 변환을 만듭니다.

Class C1
    Public Shared Widening Operator CType(ByVal p1 As C1) As C2

    End Operator
End Class

반대로, 명시적 변환은 스왑을 통해 수행할 수 있습니다.Narrowing위해서Widening위의 정의에서.

언급URL : https://stackoverflow.com/questions/1312549/is-there-a-way-to-define-an-implicit-conversion-operator-in-vb-net

반응형