programing

VB에서 DirectCast()와 CType()의 차이입니다.그물

itsource 2023. 5. 7. 21:30
반응형

VB에서 DirectCast()와 CType()의 차이입니다.그물

저는 이제 막 VB에 들어간 C/C++/C# 프로그래머입니다.NET. Ctype(및 CInt, CBool, CStr)을 캐스트에 사용하는 것은 캐릭터가 적고 처음 접하게 된 캐스팅 방식이기 때문입니다. 하지만 DirectCast와 TryCast에 대해서도 알고 있습니다.

간단히 말해 DirectCast와 Ctype 간에 차이(출연 효과, 성능 등)가 있습니까?저는 TryCast의 아이디어를 이해합니다.

첫 번째로 주목해야 할 것은 VB입니다.NET은 C#과 직접 유사하지 않습니다.(type)instance주조 기구저는 이것이 두 VB를 비교할 때 출발점이자 공통적인 참고 자료로 유용하기 때문에 이것을 언급합니다.NET 연산자(및 함수 의미론을 가지고 있음에도 불구하고 함수가 아닌 연산자).

DirectCast() C# 주조 연산자보다 더 엄격합니다.이미 캐스팅된 항목이 캐스팅 중인 유형일 때만 캐스팅할 수 있습니다.값 유형의 상자를 열 수 있지만 그렇지 않으면 변환할 수 없습니다.그래서, 예를 들어, 당신은 캐스팅할 수 없습니다.short로.int당신이 C#로 할 수 있는 것처럼.(int)캐스트. 하지만 캐스트는 할 수 있어요.IEnumerable배열로, 만약 당신의 기초가 있다면.IEnumerable객체 변수는 정말로Array그리고 물론 당신은 캐스팅할 수 있습니다.Object개체 인스턴스의 유형이 상속 트리에서 캐스트 유형 아래에 있다고 가정하면 무엇이든 가능합니다.

이것은 훨씬 빠르기 때문에 바람직합니다.변환 및 유형 검사를 수행해야 하는 작업이 줄어듭니다.

CType() C# 주조 연산자보다 엄격하지 않습니다.단순한 방법으로는 할 수 없는 일들을 할 것입니다.(int)문자열을 정수로 변환하는 것과 같은 -style 캐스트입니다.부르는 것만큼이나 큰 힘을 가지고 있습니다.Convert.To___()C#에서, 그곳에서.___출연자의 대상 유형입니다.

이것은 매우 강력하기 때문에 바람직합니다.그러나 이러한 성능은 성능을 희생하는 대신에 제공됩니다. 이 성능은 다음과 같이 빠르지 않습니다.DirectCast()또는 C#의 캐스트 연산자는 캐스트를 끝내려면 꽤 많은 작업이 필요할 수 있습니다.일반적으로 선호해야 합니다.DirectCast()할 수 있을 때.

마지막으로, C#의 직접적인 유사체인 주조 연산자 하나를 놓쳤습니다.as교환입니다.

와 함께CType당신은 다음과 같은 것을 쓸 수 있습니다.Ctype("string",Integer)하지만 함께DirectCast위의 문장은 컴파일 시간 오류를 제공합니다.

 Dim a As Integer = DirectCast("1", Integer) 'Gives compiler error
 Dim b As Integer = CType("1", Integer) 'Will compile

DirectCast 니다입적한보다 더 입니다.CType.

예를 들어, 다음과 같은 오류가 발생합니다.

Sub Main()
    Dim newint As Integer = DirectCast(3345.34, Integer)
    Console.WriteLine(newint)
    Console.ReadLine()
End Sub

Visual Studio IDE에도 표시됩니다.

그러나 오류는 발생하지 않습니다.

Sub Main()
    Dim newint As Integer = CType(3345.34, Integer)
    Console.WriteLine(newint)
    Console.ReadLine()
End Sub

언급URL : https://stackoverflow.com/questions/3056514/difference-between-directcast-and-ctype-in-vb-net

반응형