2010-02-08 7 views
6

이제 C# 프로그래머로서 제네릭이 멋지다는 것을 알고 있습니다.VB.NET의 Generics

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

이 왜 : 일부 VB.NET에서 물놀이 할 때 그러나, 나는 다음은 컴파일러 오류가 발생하지 않는 것을 발견? VB.NET에서 캐스팅 할 필요가 없다는 것을 알고 있지만, 이것이 제네릭 형식의 안전성을 사용하는 주된 이유를 죽였다고 생각했을 것입니다.

편집 :이 실제 프로그래밍 운동이 아니었다 단지 나 이론에 VB.NET을 살펴 것으로 나는 엄격 옵션이 없습니다. 이것은 이론적 인 질문입니다. 옵션 strict를 사용하여 컴파일러 오류가 발생한다고 예상했기 때문에 일반 유형의 피쳐와 마찬가지입니다.

답변

10

은, VB.NET 암시 IntegerBoolean 변환 할 행복하다. Option Strict On을 VB.NET 작업의 기본값으로 사용하는 것이 좋습니다 (특히 C# 배경에서 오는 것).

Visual Studio에서 Tools | Options | Projects and Solutions | VB Defaults.

변환, 구글에서 '악 강제 형 변환'을 입력합니다 VB (고전) '여유로운 태도에 대한 자세한 내용은 편집. 비주얼 베이직 (VB)에서 좋은 일을하고자했던 우리들은이 악마와 씨름해야했습니다 ...

+1

+1 소개 된 1995 년에 작성된 VB의 악의적 유형 강제 변환에 대한 최초의 비판은 다음과 같습니다. 오늘도 여전히 관련이 있습니다. http://vb.mvps.org/articles/pt199511.pdf – MarkJ

0

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

+0

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ – Rik

+0

@Rik ... -1은 모두 비트가 높습니다. False는 모든 비트가 꺼져 있기 때문에 0입니다. –

+0

@Matthew Whited : 틀림없이, 그것은 다소 의미가 있습니다. 그래도 나는 0/1 컨벤션이 훨씬 맘에 든다. – Rik