VB의 메서드 본문 내에서는 코드 영역을 사용할 수 없습니다.NET?
참고: 이 "기능"은 Visual Studio 2015에 추가되었지만, 모든 개발자나 모든 개발자가 최신 IDE가 출시되자마자 액세스할 수 있는 것은 아니기 때문에 문제는 당분간 해결되지 않을 것입니다.
원래 질문:
일반적으로 메서드 본문 내의 코드 영역과 같은 우스꽝스러운 기능을 "필요"하거나 고려하지는 않지만 다음과 같습니다.VB를 리팩터링하고 있습니다.NET 코드는 방법이 정기적으로 500줄 이상의 코드를 실행하고 참조가 매우 밀접하게 결합되어 있어 코드가 방법 추출과 같은 간단한 리팩터링을 거부합니다.
그래서 저는 제가 방법론의 한 부분을 시도해 보겠다고 생각했습니다.저는 단지 단기적으로 코드를 정리하고 싶었습니다.하지만 IDE는 나를 허락하지 않습니다 (그 결과 컴파일러 오류가 발생했습니다).저는 단지 왜 그런지 궁금하군요.코드 영역은 컴파일러, 인텔리센스 등에 영향을 미치지 않아야 할 것 같습니다.제가 뭔가를 놓치고 있나요? (아직 VS 2005 btw를 사용하고 있습니다.)
흥미로운 점:이것은 언어별로 다릅니다.C#(처음에는 확인하지 않았습니다)에서는 괜찮지만 VB에서는 그렇지 않습니다.그물.
public module MyModule
Sub RunSnippet()
dim a as A = new A (Int32.MaxValue )
#region
Console.WriteLine ("")
#end region
....
컴파일러 오류가 발생하지만 C# 버전은 정상입니다.
코드 영역은 당신이 말했듯이 (어느 정도) "말도 안 되는 기능"이기 때문에 아마도 메서드 본문에서 지원되지 않을 것이라고 생각합니다. 하지만 C#에서는 적어도 VS 2008과 VS 2010에서는 이 기능이 작동합니다. 단지 VB에서는 작동하지 않습니다.그물.
그렇긴 하지만, 저는 그것을 피할 것입니다.방법 본체 내에 영역을 두는 것은 사람들이 더 큰 방법을 만드는 것으로 이어질 뿐입니다(그 때만이 가치가 있기 때문에). 이는 권장되지 않고 피해야 할 것입니다.
코드의 경우:
방법 추출과 같은 단순한 리팩터링을 무시합니다.
대신, 저는 그러한 방법들을 분해하기 위해 "복잡한" 리팩터링(또는 필요한 모든 것)을 하는 데 집중할 것입니다."4~500줄"의 긴 메서드는 현재 상태에서 유지할 수 없습니다.
개인적으로, 저는 그들이 "고통"을 일으키는 것을 내버려 두겠습니다. - 당신이 그들을 분해하고 부분을 다시 분해할 수 있을 때까지, 그들이 일이 필요하다는 것을 분명히 해야 합니다.
또 다른 간단한 대체 방법:
이 할 수하는 것입니다.#Region #End Region
기본적으로 다음을 클릭합니다.
Ctrl+M, Ctrl+H
이것은 기본적으로 코드를 감싼 것입니다.그런 다음 코드를 더 깔끔하고 쉽게 찾을 수 있도록 주석을 달 수 있습니다.최종 결과는 다음과 같습니다.
Visual Basic 9.0 언어 사양의 3.3장에 명시되어 있습니다.
지역 지시어는 소스 코드의 줄을 그룹화하지만 컴파일에는 다른 영향을 미치지 않습니다.통합 개발 환경(IDE)에서 전체 그룹을 축소하여 숨기거나 확장하여 볼 수 있습니다.이러한 지침은 메서드 본문 내에서 시작하거나 종료할 수 없다는 점에서 특별합니다.
또는 다른 말로 하면, 사양에 그렇게 명시되어 있기 때문에 할 수 없습니다.
왜 이렇게 지정되었는지에 대해서는 VB가 기억하는 한 오래된 IDE 기능과 관련이 있다고 생각합니다.도구 + 옵션, 텍스트 편집기, 기본, VB 특정, 프로시저 줄 구분 기호 표시.그건 그냥 추측일 뿐이지, 아마 별로 좋은 추측은 아닐 겁니다.
업데이트: 이제 Roslyn이 지원하며 VS2015에 처음 포함되었습니다.
2015년 11월 기준:Visual Studio 2015에서는 이제 지원되므로 원하는 대로 하십시오.
샘플 코드:
With frmMain
#region "A sample region in odd place"
.show()
.text = "Sample"
#end region
End With
참고: Visual Studio의 이전 버전에서는 VB에서 작동하지 않는 것 같습니다.NET, 하지만 C#에서는 작동합니다.
VB에 대해서는 잘 모르겠지만 C#에서는 1.0부터 허용된 것으로 알고 있습니다.
실제로, 코드 영역을 스코프와 교차하는 이상한 위치에 배치할 수도 있습니다.예:
class Test
{
static void Main()
{
if (DateTime.Now.Hour > 12)
{
#region Foo
Console.WriteLine("Afternoon");
}
#endregion
}
}
여기서 영역은 다음 내에서 시작됩니다.if
문이나 문 밖에서 끝납니다.끔찍하지만 컴파일러는 괜찮아요.
IDE가 지역에 코드를 넣는 것을 "허용"하지 않았다고 한 것은 무슨 뜻입니까?컴파일러 오류가 발생했습니까?
이는 Visual Basic 언어 버전 7에 지역 기능을 추가할 때 VB 팀이 선택한 것에 불과합니다.메소드 내부가 아닌 선언 수준에서 구성하는 데 유용한 기능으로 간주되어 해당 수준에서만 허용되었습니다.
C# 팀은 이 기능에 대해 다르게 느꼈고 다른 많은 곳에서 이 기능을 허용했습니다.저는 항상 C#이 놀랍다는 것을 알았습니다.#region
지시어는 다른 선언 컨텍스트에서 발생할 수 있습니다.
#region Foo
class Bar {
#endregion
}
동일한 코드는 VB에서 허용되지 않습니다.
이 질문에 대한 가장 최근의 답을 찾고 있는 사람이라면, 이제 VB에서 이것이 가능합니다.NET(버전 14 이후부터 시작)
메서드 본문 내부의 지역 지침
#Region...을(를) 입력할 수 있습니다.#End Region 구분 기호는 파일의 모든 위치, 내부 함수, 심지어 함수 본문 전체에 걸쳐 있습니다.
OP의 예는 이제 완벽하게 합법적인 구문입니다.
Sub RunSnippet()
Dim a as A = New A (Int32.MaxValue )
#Region "Test"
Console.WriteLine ("")
#End Region
End Sub
Visual Studio 2003은 VB용으로 제공되었습니다.그러나 Visual Studio 2005 이상에서는 기능이 제거되었습니다.큰 절차를 리팩터링할 때 정말 짜증이 나지만 코드 창을 분할할 수 있습니다.
솔직히, C#는 너무 많이 사용되기 때문에 지역 사용을 제한했으면 좋겠습니다.C# 프로젝트를 상속할 때 모든 코드 파일에서 제거하는 매크로가 있습니다.
제거된 또 다른 기능은 탐색 모음에서 재정의할 수 있는 메서드 목록입니다.2005년 이후 Visual Studio의 모든 새 버전에 대해 이 기능을 다시 추가했는지 확인합니다.
언급URL : https://stackoverflow.com/questions/3151722/code-regions-not-allowed-within-method-bodies-in-vb-net
'programing' 카테고리의 다른 글
지정된 속성을 가진 속성 목록을 가져오는 방법은 무엇입니까? (0) | 2023.05.11 |
---|---|
xml을 사용하여 문자열 배열 리소스의 문자열 참조 (0) | 2023.05.11 |
csv.오류: 반복기는 바이트가 아닌 문자열을 반환해야 합니다. (0) | 2023.05.11 |
ASP에서 페이지를 새로 고치려면 어떻게 해야 합니까?NET? (코드로 다시 로드할 수 있음) (0) | 2023.05.11 |
C#의 목록을 어떻게 연결합니까? (0) | 2023.05.11 |