2012-04-06 2 views
1

별칭이 함수에서 인수 유형으로 사용될 때 별칭이 아닌 유형을 우연히 사용하면 오류가 발생한다는 점에서 VB.NET 또는 C#의 유형에 별명을 지정할 수 있습니까? 아마도VB.NET에서 유형 별칭 적용

Imports AccessSpecifier = System.String 

Module Accessors 
    Delegate Function IoOper(ByRef strm As System.IO.Stream) As Action 
    Public Function accessMethod(ByRef spec As AccessSpecifier) As IoOper 
     ' implementation 
     ' ... 
    End Function 
End Module 

Module Main 
    Public Sub Main() 
     Dim spec As AccessSpecifier = New AccessSpecifier(CType("READ_WRITE", Char())) 
     Dim val = Accessors.accessMethod(spec) 
     System.Console.WriteLine(val.GetType()) 
     Dim shouldFail = Accessors.accessMethod("FAIL_ME") 
     System.Console.WriteLine(shouldFail.GetType()) 
    End Sub 
End Module 

또는 이것에 대해 갈 수있는 더 나은 방법이 있나요?

점수는 IDE를 원하는하고있어 Name의, Property들과 Record의 의미 주위 Flag의, 또는 State의 주위 Strings을 의미하는 내가 Ints 던지는거야 만약 내가 뭘하는지 알고 나를 강제로 .

도움 말?

+1

소스 코드 파일 맨 위에 Option Strict On을 입력하십시오. –

+0

'Option Strict'는 암시 적 변환을 막습니다. 유형이 동일하므로 여기에서 전환이 발생하지 않습니다. –

+0

Erm, 아니요, 정수는 문자열과 동일하지 않습니다. 네가 피 하려던 것이 아닌가? Option Strict Off를 사용하면 컴파일러는 문자열을 정수로 변환하는 * try * 코드를 생성하게되어 기쁩니다. 런타임에 kaboom을 사용하면 작동하지 않을 수 있습니다. 그렇지 않으면 vb 프로그래머가 언어에서 좋아하는 종류의 동적 타이핑. C#을 매우 엄격한 타이핑 언어로 생각하십시오. –

답변

3

.NET에서 유형 앨리어싱을 절대로 사용하지 않았습니다. 그것은 부정확 한 코드를 만들고 어떤 일이 일어나고 있는지 즉시 알 수 없습니다. 귀하의 예에서와 같이, 개인이 AccessSpecifier.vb 파일 (또는 클래스)을 찾으면 찾아 내지 못할 것입니다.

또한 앨리어싱은 프로젝트 내 및 단일 코드 파일 내에서만 작동합니다. 따라서 사용 된 모든 다양한 코드 파일에서 별칭을 정의해야합니다.

더 나은 (읽기 쉽고 유지하기 쉽고 의도가 명확하지 않은) 더 나은 옵션은 클래스를 생성하고 String으로 자동 변환하기위한 형식 변환 연산자를 오버로드하는 것입니다. 이 방식으로 새로운 클래스를 String처럼 사용하는 능력은 그대로 유지되지만 엄격한 유형 검사를 받게됩니다.

+0

.NET 프레임 워크에서 암시 적 변환에 대해 완전히 잊어 버렸습니다. 고마워요. –