Visual Basic의 새로운 기능What's new for Visual Basic

이 항목에는 각 Visual Basic 버전의 주요 기능 이름과 최신 Visual Basic 버전의 새로운 기능 및 향상된 기능에 대한 자세한 설명이 정리되어 있습니다.This topic lists key feature names for each version of Visual Basic, with detailed descriptions of the new and enhanced features in the latest versions of the language.

현재 버전Current version

Visual Basic 16.0/Visual Studio 2019 버전 16.0Visual Basic 16.0 / Visual Studio 2019 version 16.0
새 기능은 Visual Basic 16.0을 참조하세요.For new features, see Visual Basic 16.0.

이전 버전Previous versions

Visual Basic 15.8/Visual Studio 2017 버전 15.8Visual Basic 15.8 / Visual Studio 2017 version 15.8
새 기능은 Visual Basic 15.8을 참조하세요.For new features, see Visual Basic 15.8.

Visual Basic 15.5/Visual Studio 2017 버전 15.5Visual Basic 15.5 / Visual Studio 2017 version 15.5
새 기능은 Visual Basic 15.5를 참조하세요.For new features, see Visual Basic 15.5.

Visual Basic 15.3/Visual Studio 2017 버전 15.3Visual Basic 15.3 / Visual Studio 2017 version 15.3
새 기능은 Visual Basic 15.3을 참조하세요.For new features, see Visual Basic 15.3.

Visual Basic 2017/Visual Studio 2017Visual Basic 2017 / Visual Studio 2017
새 기능은 Visual Basic 2017을 참조하세요.For new features, see Visual Basic 2017.

Visual Basic/Visual Studio 2015Visual Basic / Visual Studio 2015
새 기능은 Visual Basic 14를 참조하세요.For new features, see Visual Basic 14.

Visual Basic/Visual Studio 2013Visual Basic / Visual Studio 2013
.NET 컴파일러 플랫폼("Roslyn")의 기술 미리 보기Technology previews of the .NET Compiler Platform (“Roslyn”)

Visual Basic/Visual Studio 2012Visual Basic / Visual Studio 2012
Asyncawait 키워드, 반복기, 호출자 정보 특성Async and await keywords, iterators, caller info attributes

Visual Basic, Visual Studio 2010Visual Basic, Visual Studio 2010
자동으로 구현된 속성, 컬렉션 이니셜라이저, 암시적 줄 연속, 동적, 제네릭 공변성(Covariance)/반공변성(Contravariance), 전역 네임스페이스 액세스Auto-implemented properties, collection initializers, implicit line continuation, dynamic, generic co/contra variance, global namespace access

Visual Basic/Visual Studio 2008Visual Basic / Visual Studio 2008
LINQ(통합 언어 쿼리), XML 리터럴, 지역 형식 유추, 개체 이니셜라이저, 익명 형식, 확장 메서드, 로컬 var 형식 유추, 람다 식, if 연산자, 부분 메서드(Partial Method), nullable 값 형식Language Integrated Query (LINQ), XML literals, local type inference, object initializers, anonymous types, extension methods, local var type inference, lambda expressions, if operator, partial methods, nullable value types

Visual Basic/Visual Studio 2005Visual Basic / Visual Studio 2005
My 형식 및 도우미 형식(앱, 컴퓨터, 파일 시스템, 네트워크에 액세스)The My type and helper types (access to app, computer, files system, network)

Visual Basic/Visual Studio .NET 2003Visual Basic / Visual Studio .NET 2003
비트 시프트 연산자, 루프 변수 선언Bit-shift operators, loop variable declaration

Visual Basic/Visual Studio .NET 2002Visual Basic / Visual Studio .NET 2002
Visual Basic .NET의 첫 번째 릴리스The first release of Visual Basic .NET

Visual Basic 16.0Visual Basic 16.0

Visual Basic 16.0은 .NET Core에 더 많은 Visual Basic 런타임 기능(microsoft.visualbasic.dll)을 제공하는 데 초점을 맞추며, .NET Core에 초점을 맞춘 Visual Basic의 첫 번째 버전입니다.Visual Basic 16.0 focuses on supplying more of the features of the Visual Basic Runtime (microsoft.visualbasic.dll) to .NET Core and is the first version of Visual Basic focused on .NET Core. Visual Basic 런타임의 많은 부분은 WinForms에 종속되며, 이후 버전의 Visual Basic에 추가될 예정입니다.Many portions of the Visual Basic Runtime depend on WinForms and these will be added in a later version of Visual Basic.

문 내의 더 많은 위치에서 주석 허용Comments allowed in more places within statements

Visual Basic 15.8 및 이전 버전에서는 빈 줄, 문의 끝 또는 암시적 줄 연속이 허용되는 문 내의 특정 위치에서만 주석이 허용됩니다.In Visual Basic 15.8 and earlier versions, comments are only allowed on blank lines, at the end of a statement, or in specific places within a statement where an implicit line continuation is allowed. Visual Basic 16.0부터 명시적 줄 연속 뒤와 공백 다음 밑줄로 시작하는 줄의 문 내에서도 주석이 허용됩니다.Starting with Visual Basic 16.0, comments are also allowed after explicit line continuations and within a statement on a line beginning with a space followed by an underscore.

Public Sub Main()
    cmd.CommandText = ' Comment is allowed here without _
        "SELECT * FROM Titles JOIN Publishers " _ ' This is a comment
        & "ON Publishers.PubId = Titles.PubID " _
 _ ' This is a comment on a line without code
        & "WHERE Publishers.State = 'CA'"
End Sub

Visual Basic 15.8Visual Basic 15.8

최적화된 부동 소수점-정수 변환Optimized floating-point to integer conversion

이전 버전의 Visual Basic에서 DoubleSingle 값을 정수로 변환하면 성능이 상대적으로 떨어졌습니다.In previous versions of Visual Basic, conversion of Double and Single values to integers offered relatively poor performance. Visual Basic 15.8은 다음 메서드 중 하나에 의해 반환된 값을 내장 Visual Basic 정수 변환 함수(CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt, CULng) 중 하나에 전달하거나, Option StrictOff로 설정된 경우 다음 메서드 중 하나로 반환되는 값이 암시적으로 정수 형식으로 캐스팅될 때 정수에 대한 부동 소수점 변환의 성능을 크게 향상시킵니다.Visual Basic 15.8 significantly enhances the performance of floating-point conversions to integers when you pass the value returned by any of the following methods to one of the intrinsic Visual Basic integer conversion functions (CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt, CULng), or when the value returned by any of the following methods is implicitly cast to an integral type when Option Strict is set to Off:

이렇게 최적화하면 다량의 정수 형식 변환을 수행하는 코드의 경우 코드 실행 속도가 최대 2배까지 더 빨라집니다.This optimization allows code to run faster -- up to twice as fast for code that does a large number of conversions to integer types. 다음 예제에서는 이 최적화에 영향을 받는 몇 가지 간단한 메서드 호출을 보여줍니다.The following example illustrates some simple method calls that are affected by this optimization:

Dim s As Single = 173.7619
Dim d As Double = s

Dim i1 As Integer = CInt(Fix(s))               ' Result: 173
Dim b1 As Byte = CByte(Int(d))                 ' Result: 173
Dim s1 AS Short = CShort(Math.Truncate(s))     ' Result: 173
Dim i2 As Integer = CInt(Math.Ceiling(d))      ' Result: 174
Dim i3 As Integer = CInt(Math.Round(s))        ' Result: 174

부동 소수점 값을 반올림하는 것이 아니라 잘린다는 점에 유의하세요.Note that this truncates rather than rounds floating-point values.

Visual Basic 15.5Visual Basic 15.5

뒤에 오지 않는 명명된 인수Non-trailing named arguments

Visual Basic 15.3 및 이전 버전에서 메서드 호출이 위치 및 이름별 인수를 포함하는 경우 위치 인수는 명명된 인수 앞에 와야 했습니다.In Visual Basic 15.3 and earlier versions, when a method call included arguments both by position and by name, positional arguments had to precede named arguments. Visual Basic 15.5부터 위치 및 명명된 인수는 마지막 위치 인수까지 모든 인수가 올바른 위치에 있는 한 순서에 관계 없이 나타날 수 있습니다.Starting with Visual Basic 15.5, positional and named arguments can appear in any order as long as all arguments up to the last positional argument are in the correct position. 이는 명명된 인수가 코드를 더 쉽게 읽을 수 있도록 사용되는 경우 특히 유용합니다.This is particularly useful when named arguments are used to make code more readable.

예를 들어 다음 메서드 호출은 명명된 인수 사이에 두 개의 위치 인수를 갖습니다.For example, the following method call has two positional arguments between a named argument. 명명된 인수는 값 19가 나이를 나타낸다는 것을 명백하게 합니다.The named argument makes it clear that the value 19 represents an age.

StudentInfo.Display("Mary", age:=19, #9/21/1998#)

Private Protected 멤버 액세스 한정자Private Protected member access modifier

이 새 키워드 조합은 포함하는 클래스의 모든 멤버를 통해 액세스하고 포함하는 클래스에서 파생된 형식(해당 형식이 포함하는 어셈블리에 있는 경우에만)을 통해 액세스할 수 있는 멤버를 정의합니다.This new keyword combination defines a member that is accessible by all members in its containing class as well as by types derived from the containing class, but only if they are also found in the containing assembly. 구조체를 상속할 수 없으므로 Private Protected는 클래스의 멤버에만 적용할 수 있습니다.Because structures cannot be inherited, Private Protected can only be applied to the members of a class.

선행 16진수/이진/8진수 구분 기호Leading hex/binary/octal separator

Visual Basic 2017은 숫자 구분 기호로 밑줄 문자(_)에 대한 지원을 추가했습니다.Visual Basic 2017 added support for the underscore character (_) as a digit separator. Visual Basic 15.5부터 접두사와 16 진수, 이진 또는 8진수 숫자 사이의 선행 구분 기호로 밑줄 문자를 사용할 수 있습니다.Starting with Visual Basic 15.5, you can use the underscore character as a leading separator between the prefix and hexadecimal, binary, or octal digits. 다음 예제에서는 선행 숫자 구분 기호를 사용하여 16진수 숫자로 3,271,948,384를 정의합니다.The following example uses a leading digit separator to define 3,271,948,384 as a hexadecimal number:

Dim number As Integer = &H_C305_F860

선행 구분 기호로 밑줄 문자를 사용하려면 Visual Basic 프로젝트(*.vbproj) 파일에 다음 요소를 추가해야 합니다.To use the underscore character as a leading separator, you must add the following element to your Visual Basic project (*.vbproj) file:

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

Visual Basic 15.3Visual Basic 15.3

명명된 튜플 유추Named tuple inference

변수에서 튜플 요소의 값을 할당할 때 Visual Basic는 해당 변수 이름에서 튜플 요소의 이름을 유추합니다. 튜블 요소의 이름을 명시적으로 지정할 필요가 없습니다.When you assign the value of tuple elements from variables, Visual Basic infers the name of tuple elements from the corresponding variable names; you do not have to explicitly name a tuple element. 다음 예제에서는 유추를 사용하여 세 개의 명명된 요소, state, stateNamecapital로 튜플을 만듭니다.The following example uses inference to create a tuple with three named elements, state, stateName, and capital.

Const state As String = "MI"
Const stateName As String = "Michigan"
Const capital As String = "Lansing"
Dim stateInfo = ( state, stateName, capital )
Console.WriteLine($"{stateInfo.stateName}: 2-letter code: {stateInfo.State}, Capital {stateInfo.capital}")   
' The example displays the following output:
'      Michigan: 2-letter code: MI, Capital Lansing

추가 컴파일러 스위치Additional compiler switches

이제 Visual Basic 명령줄 컴파일러는 참조 어셈블리의 출력을 제어하기 위해 -refout -refonly 컴파일러 옵션을 지원합니다.The Visual Basic command-line compiler now supports the -refout and -refonly compiler options to control the output of reference assemblies. -refout는 참조 어셈블리의 출력 디렉터리를 정의하고 -refonly는 참조 어셈블리만 컴파일로 출력되도록 지정합니다.-refout defines the output directory of the reference assembly, and -refonly specifies that only a reference assembly is to be output by compilation.

Visual Basic 2017Visual Basic 2017

튜플Tuples

튜플은 단일 메서드 호출에서 여러 값을 반환하는 데 주로 사용되는 간단한 데이터 구조입니다.Tuples are a lightweight data structure that most commonly is used to return multiple values from a single method call. 일반적으로 하나의 메서드에서 여러 값을 반환하려면 다음 중 하나를 수행해야 합니다.Ordinarily, to return multiple values from a method, you have to do one of the following:

  • 사용자 지정 형식(Class 또는 Structure)을 정의합니다.Define a custom type (a Class or a Structure). 이는 대규모 솔루션입니다.This is a heavyweight solution.

  • 메서드에서 값을 반환하는 것 외에도 ByRef 매개 변수를 하나 이상 정의합니다.Define one or more ByRef parameters, in addition to returning a value from the method.

Visual Basic의 튜플 지원을 사용하면 튜플을 신속하게 정의하고, 필요에 따라 해당 값에 의미 체계 이름을 할당하고, 해당 값을 빠르게 검색할 수 있습니다.Visual Basic's support for tuples lets you quickly define a tuple, optionally assign semantic names to its values, and quickly retrieve its values. 다음 예제에서는 TryParse 메서드 호출을 래핑하고 튜플을 반환합니다.The following example wraps a call to the TryParse method and returns a tuple.

Imports System.Globalization

Public Module NumericLibrary
    Public Function ParseInteger(value As String) As (Success As Boolean, Number As Int32)
        Dim number As Integer
        Return (Int32.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture, number), number)
    End Function
End Module

그런 다음 메서드를 호출하고 반환된 튜플을 코드에서 다음과 같이 처리할 수 있습니다.You can then call the method and handle the returned tuple with code like the following.

Dim numericString As String = "123,456"
Dim result = ParseInteger(numericString)
Console.WriteLine($"{If(result.Success, $"Success: {result.Number:N0}", "Failure")}")
Console.ReadLine()
'      Output: Success: 123,456

이진 리터럴 및 자릿수 구분 기호Binary literals and digit separators

&B 또는 &b 접두사를 사용하여 이진 리터럴을 정의할 수 있습니다.You can define a binary literal by using the prefix &B or &b. 또한 밑줄 문자 _를 자릿수 구분 기호로 사용하여 가독성을 향상할 수 있습니다.In addition, you can use the underscore character, _, as a digit separator to enhance readability. 다음 예제에서는 두 기능을 모두 사용하여 Byte 값을 할당하고 10진수, 16진수, 이진수로 표시합니다.The following example uses both features to assign a Byte value and to display it as a decimal, hexadecimal, and binary number.

Dim value As Byte = &B0110_1110
Console.WriteLine($"{NameOf(value)}  = {value} (hex: 0x{value:X2}) " +
                  $"(binary: {Convert.ToString(value, 2)})")
' The example displays the following output:
'      value  = 110 (hex: 0x6E) (binary: 1101110)      

자세한 내용은 바이트, 정수, Long, Short, SByte, UInteger, ULongUShort 데이터 형식의 "리터럴 할당" 섹션을 참조하세요.For more information, see the "Literal assignments" section of the Byte, Integer, Long, Short, SByte, UInteger, ULong, and UShort data types.

C# 참조 반환 값 지원Support for C# reference return values

C# 7.0부터 C#에서 참조 반환 값을 지원합니다.Starting with C# 7.0, C# supports reference return values. 즉, 호출하는 메서드가 참조로 반환된 값을 받을 때 참조 값을 변경할 수 있습니다.That is, when the calling method receives a value returned by reference, it can change the value of the reference. Visual Basic에서 참조 반환 값이 있는 메서드를 작성할 수는 없지만 참조 반환 값을 사용하고 수정할 수 있습니다.Visual Basic does not allow you to author methods with reference return values, but it does allow you to consume and modify the reference return values.

예를 들어 C#으로 작성된 다음 Sentence 클래스에는 문장 내에서 지정한 하위 문자열로 시작하는 다음 단어를 찾는 FindNext 메서드가 포함되어 있습니다.For example, the following Sentence class written in C# includes a FindNext method that finds the next word in a sentence that begins with a specified substring. 문자열은 참조 반환 값으로 반환되며, 메서드에 참조로 전달된 Boolean 변수는 검색에 성공했는지 여부를 나타냅니다.The string is returned as a reference return value, and a Boolean variable passed by reference to the method indicates whether the search was successful. 즉, 호출자는 반환된 값을 읽을 수 있을 뿐만 아니라 수정할 수도 있으며, 수정 내용이 Sentence 클래스에 반영됩니다.This means that the caller can not only read the returned value; he or she can also modify it, and that modification is reflected in the Sentence class.

using System;
 
public class Sentence
{
    private string[] words;
    private int currentSearchPointer;
    
    public Sentence(string sentence)
    {
        words = sentence.Split(' ');
        currentSearchPointer = -1;
    }
    
    public ref string FindNext(string startWithString, ref bool found)
    {
        for (int count = currentSearchPointer + 1; count < words.Length; count++)
        {
            if (words[count].StartsWith(startWithString))
            {
                currentSearchPointer = count;
                found = true;
                return ref words[currentSearchPointer];
            }
        }
        currentSearchPointer = -1;
        found = false;
        return ref words[0];
    }
    
    public string GetSentence()
    {
        string stringToReturn = null;
        foreach (var word in words)
            stringToReturn += $"{word} ";
      
        return stringToReturn.Trim();    
    }
}

가장 간단한 형태로, 문장에서 찾은 단어를 코드에서 다음과 같이 수정할 수 있습니다.In its simplest form, you can modify the word found in the sentence by using code like the following. 메서드 대신 메서드가 반환하는 식, 즉 참조 반환 값에 값을 할당합니다.Note that you are not assigning a value to the method, but rather to the expression that the method returns, which is the reference return value.

Dim sentence As New Sentence("A time to see the world is now.")
Dim found = False
sentence.FindNext("A", found) = "A good" 
Console.WriteLine(sentence.GetSentence()) 
' The example displays the following output:
'      A good time to see the world is now.

그러나 이 코드의 문제는 일치 항목이 없을 경우 메서드가 첫 번째 단어를 반환한다는 것입니다.A problem with this code, though, is that if a match is not found, the method returns the first word. 이 예제에서는 Boolean 인수의 값을 검사하여 일치 항목이 있는지 확인하지 않으므로 일치 항목이 없을 경우 첫 번째 단어를 수정합니다.Since the example does not examine the value of the Boolean argument to determine whether a match is found, it modifies the first word if there is no match. 다음 예제에서는 일치 항목이 없을 경우 첫 번째 단어를 해당 단어로 대체하여 이 문제를 해결합니다.The following example corrects this by replacing the first word with itself if there is no match.

Dim sentence As New Sentence("A time to see the world is now.")
Dim found = False
sentence.FindNext("A", found) = IIf(found, "A good", sentence.FindNext("B", found)) 
Console.WriteLine(sentence.GetSentence()) 
' The example displays the following output:
'      A good time to see the world is now.

더 나은 해결 방법은 참조 반환 값이 참조로 전달되는 도우미 메서드를 사용하는 것입니다.A better solution is to use a helper method to which the reference return value is passed by reference. 그러면 도우미 메서드가 참조로 전달된 인수를 수정할 수 있습니다.The helper method can then modify the argument passed to it by reference. 다음 예제에서는 해당 작업을 수행합니다.The following example does that.

Module Example
   Public Sub Main()
      Dim sentence As New Sentence("A time to see the world is now.")
      Dim found = False
      Dim returns = RefHelper(sentence.FindNext("A", found), "A good", found) 
      Console.WriteLine(sentence.GetSentence()) 
   End Sub
   
   Private Function RefHelper(ByRef stringFound As String, replacement As String, success As Boolean) _ 
                    As (originalString As String, found As Boolean) 
      Dim originalString = stringFound
      If found Then stringFound = replacement
      Return (originalString, found)   
   End Function
End Module
' The example displays the following output:
'      A good time to see the world is now.

자세한 내용은 참조 반환 값을 참조하세요.For more information, see Reference Return Values.

Visual Basic 14Visual Basic 14

NameOfNameOf

문자열을 하드 코드하지 않고 오류 메시지에서 사용하기 위해 형식이나 멤버의 정규화되지 않은 문자열 이름을 가져올 수 있습니다.You can get the unqualified string name of a type or member for use in an error message without hard coding a string. 이 기능을 사용하면 리팩터링할 때 코드를 올바르게 유지할 수 있습니다.This allows your code to remain correct when refactoring. 이 기능은 MVC(Model-View-Controller) 링크를 연결하고 속성 변경 이벤트를 발생시키는 데도 유용합니다.This feature is also useful for hooking up model-view-controller MVC links and firing property changed events.

문자열 보간String interpolation

문자열 보간 식을 사용하여 문자열을 생성할 수 있습니다.You can use string interpolation expressions to construct strings. 보간된 문자열 식은 식이 포함된 템플릿 문자열과 유사합니다.An interpolated string expression looks like a template string that contains expressions. 보간된 문자열은 인수 측면에서 Composite Formatting보다 이해하기 쉽습니다.An interpolated string is easier to understand with respect to arguments than Composite Formatting.

Null 조건부 멤버 액세스 및 인덱싱Null-conditional member access and indexing

멤버 액세스(?.) 또는 인덱스(?[]) 작업을 수행하기 전에 매우 간단한 구문을 사용하여 null 테스트를 수행할 수 있습니다.You can test for null in a very light syntactic way before performing a member access (?.) or index (?[]) operation. 이러한 연산자는 null 검사의 처리를 위해 작성하는 코드의 양을 줄이는 데 도움이 되며 특히 데이터 구조에서 아래로 내려가는 경우에 유용합니다.These operators help you write less code to handle null checks, especially for descending into data structures. 왼쪽 피연산자 또는 개체 참조가 null이면 연산에서 null이 반환됩니다.If the left operand or object reference is null, the operations returns null.

다중 선 문자열 리터럴Multi-line string literals

문자열 리터럴에 줄 바꿈 시퀀스가 포함될 수 있습니다.String literals can contain newline sequences. <xml><![CDATA[...text with newlines...]]></xml>.Value 사용과 관련된 이전 작업은 더 이상 필요하지 않습니다.You no longer need the old work around of using <xml><![CDATA[...text with newlines...]]></xml>.Value

설명Comments

암시적 줄 연속 뒤, 이니셜라이저 식 내부 및 LINQ 식 항 사이에 주석을 입력할 수 있습니다.You can put comments after implicit line continuations, inside initializer expressions, and among LINQ expression terms.

더 효율적인 정규화된 이름 확인Smarter fully-qualified name resolution

Threading.Thread.Sleep(1000)과 같은 코드가 제공된 경우 이전에는 Visual Basic에서 "Threading" 네임스페이스를 조회하고 System.Threading 및 System.Windows.Threading 간에 모호하다는 사실을 발견한 후 오류를 보고했습니다.Given code such as Threading.Thread.Sleep(1000), Visual Basic used to look up the namespace "Threading", discover it was ambiguous between System.Threading and System.Windows.Threading, and then report an error. 이제 Visual Basic에서는 두 가지 가능한 네임스페이스를 함께 고려합니다.Visual Basic now considers both possible namespaces together. 완성 목록을 표시하는 경우 Visual Studio 편집기에서 두 형식의 멤버가 모두 완성 목록에 나열됩니다.If you show the completion list, the Visual Studio editor lists members from both types in the completion list.

연도가 먼저 나오는 날짜 리터럴Year-first date literals

yyyy-mm-dd 형식(#2015-03-17 16:10 PM#)의 날짜 리터럴을 사용할 수 있습니다.You can have date literals in yyyy-mm-dd format, #2015-03-17 16:10 PM#.

읽기 전용 인터페이스 속성Readonly interface properties

읽기/쓰기 속성을 사용하여 읽기 전용 인터페이스 속성을 구현할 수 있습니다.You can implement readonly interface properties using a readwrite property. 이러한 인터페이스는 최소 기능을 보장하며 구현 클래스에서 속성이 설정되도록 허용하는 것을 차단하지 않습니다.The interface guarantees minimum functionality, and it does not stop an implementing class from allowing the property to be set.

TypeOf <expr> IsNot <type>TypeOf <expr> IsNot <type>

코드를 더 읽기 쉽게 만들기 위해 IsNot과 함께 TypeOf를 사용할 수 있습니다.For more readability of your code, you can now use TypeOf with IsNot.

#Disable Warning <ID> 및 #Enable Warning <ID>#Disable Warning <ID> and #Enable Warning <ID>

소스 파일 내의 영역에 대한 특정 경고를 사용하지 않거나 사용하도록 설정할 수 있습니다.You can disable and enable specific warnings for regions within a source file.

XML 문서 주석 향상XML doc comment improvements

문서 주석을 작성하면 편집기의 효율성을 높이고 매개 변수 이름의 유효성 검사, crefs(제네릭, 연산자 등)의 적절한 처리, 색 지정 및 리팩터링에 대한 지원을 제공할 수 있습니다.When writing doc comments, you get smart editor and build support for validating parameter names, proper handling of crefs (generics, operators, etc.), colorizing, and refactoring.

부분 모듈 및 인터페이스 정의Partial module and interface definitions

클래스 및 구조체 외에도 부분 모듈과 인터페이스를 선언할 수 있습니다.In addition to classes and structs, you can declare partial modules and interfaces.

메서드 본문 내의 #Region 지시문#Region directives inside method bodies

#Region…#End Region 구분 기호를 파일의 원하는 위치, 함수 내부 및 여러 함수 본문을 포괄하여 입력할 수 있습니다.You can put #Region…#End Region delimiters anywhere in a file, inside functions, and even spanning across function bodies.

Overrides 정의는 암시적으로 overloads임Overrides definitions are implicitly overloads

Overrides 한정자를 정의에 추가하면 일반적인 경우에 더 적은 코드를 입력할 수 있도록 컴파일러에서 암시적으로 Overloads를 추가합니다.If you add the Overrides modifier to a definition, the compiler implicitly adds Overloads so that you can type less code in common cases.

특성 인수에서 허용되는 CObjCObj allowed in attributes arguments

이전에는 컴파일러에서 CObj(...)가 특성 생성에서 사용될 때 상수가 아니라는 오류를 제공했습니다.The compiler used to give an error that CObj(…) was not a constant when used in attribute constructions.

여러 인터페이스의 모호한 메서드 선언 및 사용Declaring and consuming ambiguous methods from different interfaces

이전에는 다음 코드에서 IMock을 선언하거나 GetDetails를 호출하지 못하게 하는 오류가 발생했습니다(이러한 항목이 C#에서 선언된 경우).Previously the following code yielded errors that prevented you from declaring IMock or from calling GetDetails (if these had been declared in C#):

Interface ICustomer
  Sub GetDetails(x As Integer)
End Interface

Interface ITime
  Sub GetDetails(x As String)
End Interface

Interface IMock : Inherits ICustomer, ITime
  Overloads Sub GetDetails(x As Char)
End Interface

Interface IMock2 : Inherits ICustomer, ITime
End Interface

이제 컴파일러에서 일반 오버로드 확인 규칙을 사용하여 호출하는 데 가장 적합한 GetDetails를 선택하며, 샘플에서와 같이 Visual Basic에서 인터페이스 관계를 선언할 수 있습니다.Now the compiler will use normal overload resolution rules to choose the most appropriate GetDetails to call, and you can declare interface relationships in Visual Basic like those shown in the sample.

참고 항목See also