2011-08-30 2 views
7

코드 VB.NET에VB.NET 구문과 문자열 확장 메서드

Module Utils 
<Runtime.CompilerServices.Extension()> _ 
Public Sub Print(ByVal message As String) 
    Console.WriteLine(message) 
End Sub 
End Module 

Public Class Foo 
Public Sub New() 
    Dim test = "cucu" 
    test.Print() ' no problem: custom string extension method ' 
    "cucu".Print() ' syntax error ' 
End Sub 
End Class 

1) 첫 번째 문제는, 나는 "cucu".MyExtensionMethod()뿐만 아니라 test.MyExtensionMethod을 사용할 수 있도록 원합니다();

1 ')

"No Result".Print() ' Print is an extension method ' 
    " No Result ".Trim() ' Trim is a framework method ' 

같은 구문 그러나, 문법 등의

myTextBox.Text = "No Result".Translate() ' Translate is an extension method ' 
    myTextBox.Text = " No Result ".Trim() ' Trim is a framework method ' 

작품 잘

둘 다 작동하지 않습니다.

그래서 문자열 상수 동작의 일부 일관성 오류가있는 것처럼 보입니다.

2) (첨부 된 그림에서) COMMENTS를보십시오. 단어 "custom", "string"및 "error"는 강조 표시되어 있지만 주석에 표시되어 있으므로 파란색이 아닌 초록색이어야합니다.

왜 이렇게할까요? 해결 방법은 무엇입니까?

편집 : 표준

으로 한스 옆모습을 언급 ...

편집 2 (통 사적 "미스"고하지 많은 경우에도)

Microsoft Connect에서 "버그"로 선언 "cucu".Trim()과 같은 문자열 메서드는 작동하지 않습니다.

+1

음, 해결 방법은 'test'로했던 것처럼 변수에 할당하는 것입니다. – BoltClock

+0

@BoltClock)))) ok, 왜 이까요?)) – serhio

+1

이미 버그라고 확신합니까? – BoltClock

답변

2

당신은 CStr("cucu").ShowDialog()

8

내가이 참 (비주얼 스튜디오 2008에서 테스트)를 "버그"입니다 확인할 수 있습니다 할 수 있습니다. 그러나 실제로 VB에서 설계된 것이며 변경되지 않습니다.

그러나 나는 왜 이 끔찍한 질문 인 이유를 설명하기 위해 시간을 갖고 싶습니다.. Sorry Serhio.

  1. 문제를 재현하는 데 필요한 모든 단계가 나와 있지 않습니다.
  2. 완전한 코드를 제공하지 않습니다.
  3. 그것은 (여기 Infer를 사용하지 않는 -이 문제에서 detracts) 최소로 문제를 감소하지 않습니다 결과적으로
  4. , 완전히이 동작을 설명 할 수 백 가지 이유가없이,있다 버그 (예를 들어, stakx '우수한 (지금 삭제 된) 응답을보십시오).

    Module Extensions 
        <System.Runtime.CompilerServices.Extension()> _ 
        Public Sub ShowDialog(ByVal message As String) 
         Console.WriteLine(message) 
        End Sub 
    End Module 
    
    Module Module1 
        Sub Main() 
         Dim s As String = "Hello" 
         s.ShowDialog() 
         ' Doesn’t work: 
         '"World".ShowDialog() 
         ' Works: 
         Call "World".ShowDialog() 
        End Sub 
    End Module 
    

    동작 :

여기에 완벽한 예는 이러한 문제 (비어있는 새 콘솔 프로젝트 솔루션을 만들고 Module1.vb에이 코드를 붙여 넣기)를 가지고 있지 않습니다, VB의 기본 설정을 사용하여,의 VB에서 일관성이 있습니다. 논리 행에서 첫 번째 토큰으로 값을 가질 수 없습니다.예를 들어, 다음 코드는 (양식 클래스 Form1의 기존의 적절한 정의에 주어진) 컴파일되지 않습니다 :

New Form1().ShowDialog() 

다시 한 번 수정 Call에 의해 표현을 접두사로 사용하는 것입니다 :

Call New Form1().ShowDialog() 
+0

비고 중 일부를 고쳤습니다. ..이게 진짜 질문이 아님을 나는 안다. 나는이 "문제"를 나누고 싶다. – serhio