Visual Basic .NET Language
Visual Basic 14.0 기능
수색…
소개
Visual Basic 14는 Visual Studio 2015의 일부로 제공되는 Visual Basic 버전입니다.
이 버전은 약 130 만 줄의 VB에서 처음부터 다시 작성되었습니다. 공통적 인 자극을 없애고 공통 코딩 패턴을보다 명확하게 만들기 위해 많은 기능이 추가되었습니다.
Visual Basic의 버전 번호는 12에서 14로 곧장 13을 건너 뛰었습니다. 이는 Visual Studio 자체의 버전 번호 매기기에 VB를 유지하기 위해 수행되었습니다.
Null 조건부 연산자
자세한 null 검사를 피하려면 ?.
연산자가이 언어로 도입되었습니다.
오래된 자세한 구문 :
If myObject IsNot Nothing AndAlso myObject.Value >= 10 Then
이제 간결하게 바꿀 수 있습니다.
If myObject?.Value >= 10 Then
?
연산자는 속성 체인이있을 때 특히 강력합니다. 다음을 고려하세요:
Dim fooInstance As Foo = Nothing
Dim s As String
일반적으로 다음과 같이 작성해야합니다.
If fooInstance IsNot Nothing AndAlso fooInstance.BarInstance IsNot Nothing Then
s = fooInstance.BarInstance.Baz
Else
s = Nothing
End If
하지만 ?
연산자는 다음과 같이 바꿀 수 있습니다.
s = fooInstance?.BarInstance?.Baz
NameOf 연산자
NameOf
연산자는 컴파일 할 때 네임 스페이스, 형식, 변수 및 멤버 이름을 확인한 다음 해당 문자열과 바꿉니다.
사용 사례 중 하나 :
Sub MySub(variable As String)
If variable Is Nothing Then Throw New ArgumentNullException("variable")
End Sub
이전 구문에서는 변수의 이름을 바꾸고 하드 코딩 된 문자열을 잘못된 값으로 남겨 둘 위험이 있습니다.
Sub MySub(variable As String)
If variable Is Nothing Then Throw New ArgumentNullException(NameOf(variable))
End Sub
NameOf
사용하면 변수의 이름을 바꾸면 컴파일러 오류가 발생합니다. 이렇게하면 이름 바꾸기 도구의 이름을 한 번만 변경하여 이름을 바꿀 수 있습니다.
NameOf
연산자는 대괄호 안의 참조의 마지막 구성 요소 만 사용합니다. 이것은 NameOf
연산자에서 네임 스페이스와 같은 것을 처리 할 때 중요합니다.
Imports System
Module Module1
Sub WriteIO()
Console.WriteLine(NameOf(IO)) 'displays "IO"
Console.WriteLine(NameOf(System.IO)) 'displays "IO"
End Sub
End Module
또한 운영자는 이름 변경 수입을 해결하지 않고 입력 된 참조 이름을 사용합니다. 예 :
Imports OldList = System.Collections.ArrayList
Module Module1
Sub WriteList()
Console.WriteLine(NameOf(OldList)) 'displays "OldList"
Console.WriteLine(NameOf(System.Collections.ArrayList)) 'displays "ArrayList"
End Sub
End Module
문자열 보간법
이 새로운 기능으로 문자열 연결을보다 쉽게 읽을 수 있습니다. 이 구문은 해당 String.Format
호출로 컴파일됩니다.
문자열 보간없이 :
String.Format("Hello, {0}", name)
문자열 보간 사용 :
$"Hello, {name}"
두 줄은 동일하며 둘 다 String.Format
에 대한 호출로 컴파일됩니다.
String.Format
와 같이 대괄호에는 단일 표현식 (메서드, 속성, null 병합 연산자 등) 호출이 포함될 수 있습니다.
String Interform은 런타임 오류가 발생하지 않도록하기 때문에 String.Format
보다 선호되는 방법입니다. 다음 String.Format
행을 고려하십시오.
String.Format("The number of people is {0}/{1}", numPeople)
이것은 컴파일되지만 컴파일러가 인수의 수가 자리 표시 자와 일치하는지 검사하지 않으므로 런타임 오류가 발생합니다.
읽기 전용 자동 등록 정보
읽기 전용 속성은 항상 VB.NET에서 다음 형식으로 가능했습니다.
Public Class Foo
Private _MyProperty As String = "Bar"
Public ReadOnly Property MyProperty As String
Get
Return _MyProperty
End Get
End Property
End Class
Visual Basic의 새 버전에서는 다음과 같이 속성 선언을 사용할 수 있습니다.
Public Class Foo
Public ReadOnly Property MyProperty As String = "Bar"
End Class
컴파일러에 의해 생성 된 실제 구현은 두 예제 모두에서 동일합니다. 그것을 작성하는 새로운 방법은 단지 짧은 손일뿐입니다. 컴파일러는 여전히 읽기 전용 속성을 백업하기 위해 _<PropertyName>
형식의 개인 필드를 생성합니다.
부분 모듈 및 인터페이스
부분 클래스와 마찬가지로 새 버전의 Visual Basic에서는 이제 부분 모듈과 부분 인터페이스를 처리 할 수 있습니다. 구문과 동작은 부분 클래스의 경우와 완전히 동일합니다.
부분 모듈 예 :
Partial Module Module1
Sub Main()
Console.Write("Ping -> ")
TestFunktion()
End Sub
End Module
Partial Module Module1
Private Sub TestFunktion()
Console.WriteLine("Pong")
End Sub
End Module
그리고 부분 인터페이스 :
Partial Interface Interface1
Sub Methode1()
End Interface
Partial Interface Interface1
Sub Methode2()
End Interface
Public Class Class1
Implements Interface1
Public Sub Methode1() Implements Interface1.Methode1
Throw New NotImplementedException()
End Sub
Public Sub Methode2() Implements Interface1.Methode2
Throw New NotImplementedException()
End Sub
End Class
부분 클래스와 마찬가지로 부분 모듈과 인터페이스에 대한 정의는 동일한 네임 스페이스와 같은 어셈블리에 있어야합니다. 이는 모듈 및 인터페이스의 부분 부분이 컴파일 중에 병합되고 컴파일 된 어셈블리에 모듈 또는 인터페이스의 원래 정의가 분할되었다는 표시가 없기 때문입니다.
여러 줄 문자열 리터럴
이제 VB에서는 여러 줄로 분할 된 문자열 리터럴을 허용합니다.
이전 구문 :
Dim text As String = "Line1" & Environment.NewLine & "Line2"
새로운 구문 :
Dim text As String = "Line 1
Line 2"
#Region 지시어 개선
#Region 지시어는 이제 메서드 내부에 배치 할 수 있으며 메서드, 클래스 및 모듈로 확장 할 수도 있습니다.
#Region "A Region Spanning A Class and Ending Inside Of A Method In A Module"
Public Class FakeClass
'Nothing to see here, just a fake class.
End Class
Module Extensions
''' <summary>
''' Checks the path of files or directories and returns [TRUE] if it exists.
''' </summary>
''' <param name="Path">[Sting] Path of file or directory to check.</param>
''' <returns>[Boolean]</returns>
<Extension>
Public Function PathExists(ByVal Path As String) As Boolean
If My.Computer.FileSystem.FileExists(Path) Then Return True
If My.Computer.FileSystem.DirectoryExists(Path) Then Return True
Return False
End Function
''' <summary>
''' Returns the version number from the specified assembly using the assembly's strong name.
''' </summary>
''' <param name="Assy">[Assembly] Assembly to get the version info from.</param>
''' <returns>[String]</returns>
<Extension>
Friend Function GetVersionFromAssembly(ByVal Assy As Assembly) As String
#End Region
Return Split(Split(Assy.FullName, ",")(1), "=")(1)
End Function
End Module
암시 적 줄 연속 후 주석
VB 14.0에서는 암시 적 줄 연속으로 주석을 추가 할 수있는 기능을 제공합니다.
Dim number =
From c As Char 'Comment
In "dj58kwd92n4" 'Comment
Where Char.IsNumber(c) 'Comment
Select c 'Comment
예외 처리
코딩하는 동안 예기치 않은 오류가 자주 발생하여 디버깅 및 테스트가 필요합니다. 그러나 때로는 오류가 실제로 예상되며이를 우회하기 위해 Try..Catch..Throw..Finally..End Try
블록이 있습니다.
오류를 올바르게 관리하기 위해 Try..Catch
블록에 코드를 넣습니다. Try..Catch
Catch
가 이름 상태로이 블록에서 발생하는 모든 예외를 catch합니다.
그리고 예외가 발생하면 오류를 Throw
가능성이 있습니다. 즉 오류를 사용자에게 알리거나 코드 자체에서 내부적으로 관리하기 위해 반환하는 것입니다.
Finally
부분은 결과가 무엇이든간에 예외가 있거나없는 경우 코드가 블록 밖으로 나가기 전에 실행되는 최종 코드입니다.
시계 밖으로 튀어 나와야 할 경우 Exit Try
문을 사용할 수 있습니다. 그러나 여기에서도 Finally
섹션의 코드가 끝나기 전에 실행됩니다.
구문은 간단합니다.
Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Try
and End Try
만이 필수입니다. 나머지 부분은 무시할 수 있지만 우수 사례로 비워 둘 경우에도 Finally
부분을 포함하십시오.
예외가 발생하면 잡을 수있는 여러 유형의 예외가 있습니다. .NET 프레임 워크에서 사용할 수있는 준비된 예외입니다 (아래 참조).
예외 클래스 | 간단한 설명 |
---|---|
System.IO.IOException | I / O 오류 처리 |
System.IndexOutOfRangeException | 범위를 벗어난 배열 색인을 참조합니다. |
System.ArrayTypeMismatchException | 유형이 배열 유형과 일치하지 않을 때 |
System.NullReferenceException | null 객체를 참조 할 때 생성 된 오류를 처리합니다. |
System.DivideByZeroException | 배당금을 0으로 나누어 생성 된 오류를 처리합니다. |
System.InvalidCastException | 타입 캐스팅 중에 발생한 오류를 처리합니다. |
System.OutOfMemoryException | 불충분 한 여유 메모리로 인해 생성 된 오류를 처리합니다. |
System.StackOverflowException | 스택 오버플로에서 생성 된 오류를 처리합니다. |
--------------------------- | ------------------------ |