Visual Basic の新機能What's new for 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
自動実装プロパティ、コレクション初期化子、暗黙的な行の連結、動的、ジェネリック co/負の分散、グローバル名前空間のアクセス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 演算子、部分メソッド、null 許容値型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 は、Visual Basic ランタイム (microsoft.visualbasic.dll) より多くの機能を .NET Core に多く提供することに重点を置いており、.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 では、倍精度浮動小数点型単精度浮動小数点型の値の整数への変換で比較的低いパフォーマンスが提供されていました。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) の 1 つに渡すとき、または 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.

たとえば、次のメソッド呼び出しには、名前付き引数の間に 2 つの位置引数があります。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 進数/2 進数/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 進数、2 進数、または 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. 次の例では、3,271,948,384 を 16 進数として定義するために先頭の桁区切り記号を使用します。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. 以下の例では、推論を使用して、statestateNamecapital という 3 つの名前付き要素のタプルを作成します。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

タプルは軽量のデータ構造であり、最も一般的には、1 回のメソッド呼び出しで複数の値を返すために利用されます。Tuples are a lightweight data structure that most commonly is used to return multiple values from a single method call. 通常、1 つのメソッドから複数の値を返すには、次のいずれかを行う必要があります。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.

  • メソッドから 1 つの値を返すことに加え、1 つまたは複数の 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 進数、2 進数として表示しています。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)      

詳細については、ByteIntegerLongShortSByteUIntegerULongUShort データ型の "Literal assignments" (リテラル割り当て) セクションをご覧ください。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 のリンクをフックし、プロパティ変更イベントを発生させるためにも役立ちます。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. 引数に関しては、補間文字列は複合書式指定より理解しやすくなっています。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 インターフェイスのプロパティReadonly interface properties

readwrite プロパティを使用して readonly インターフェイスのプロパティを実装できます。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>

コードを見やすくするために、TypeOfIsNot とともに使用できるようになりました。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 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