수색…


소개

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 스택 오버플로에서 생성 된 오류를 처리합니다.
--------------------------- ------------------------


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow