문제

이제 C# 프로그래머로서 저는 제네릭이 훌륭하다는 것을 알고 있습니다.그러나 일부 VB.NET을 사용하면서 다음이 컴파일러 오류를 일으키지 않는다는 것을 발견했습니다.

Dim instance As List(Of Integer)
instance.Add(True)

왜 이런거야?VB.NET에서 캐스팅할 필요는 없다는 것을 알고 있지만 이것이 제네릭을 사용하는 주된 이유인 유형 안전성을 없애준다고 생각했습니다.

편집하다: 이것은 실제 프로그래밍 연습이 아니기 때문에 엄격한 옵션이 없으며 이론적으로 VB.NET을 살펴보았습니다.일반 유형의 기능과 마찬가지로 옵션이 엄격하지 않은 경우에도 컴파일러 오류가 발생할 것으로 예상했기 때문에 이는 이론적인 질문입니다.

도움이 되었습니까?

해결책

없이 Option Strict On, vb.net은 암시 적으로 변환하는 것을 기쁘게 생각합니다 Boolean 에게 Integer. 나는 당신이 만드는 것을 강력하게 추천합니다 (특히 C# 배경에서 온) Option Strict On vb.net 작업의 기본값.

Visual Studio 에서이 작업을 수행 할 수 있습니다 Tools | Options | Projects and Solutions | VB Defaults.

편집하다 VB (Classic) '편안한'태도에 대한 자세한 내용은 전환에 대한 태도, Google '사악한 유형 강요'. VB (Classic)에서 좋은 일을하려는 사람들은이 악마를 씨름해야했습니다.

다른 팁

얻었 니 옵션 엄격합니다 켜졌습니까?

VB.NET은 함수 호출 사이트에서 변환합니다.List(정수)는 여전히 정수(True의 정수 값인 -1)를 저장하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top