Visual Basic サンプル集 |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
現在実行中のメソッド名などの情報を取得する
2020/11/8
現在実行中のメソッド名を取得する
Public Sub Test() Debug.WriteLine(Reflection.MethodBase.GetCurrentMethod.Name & " を実行中です。") End Sub |
実行すると「Test を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
- コンストラクター(Sub New)やプロパティ(Property)の場合、通常フレームワークによって隠蔽されている名前を取得します。下記の表の通りです。たとえば、コンストラクターでこの例を実行すると「.ctor」という名前を取得します。プロパティのGetで実行するとget_プロパティ名を取得します。
種類 | 取得する名前 |
---|---|
メソッド(Function, Sub) | メソッド名。 |
プロパティ(Property) | get_プロパティ名 または set_プロパティ名。例:get_Enabled |
コンストラクター(Sub New) | .ctor |
静的コンストラクター(Shared Sub New) | .cctor |
演算子(Operator) | op_演算子名。例:op_Addition |
これでもできます。
この例を実行するにはファイルの先頭の方に Imports System.Runtime.CompilerServices の記述が必要です。
Public Sub
Test() Debug.WriteLine(Me.GetCurrentMemberName & " を実行中です。") End Sub Public Function GetCurrentMemberName(<CallerMemberName> Optional callerMethodName As String = "") As String Return callerMethodName End Function |
実行すると「Test を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
参考:呼び出し元情報
- こちらの例ではコンパイル時に文字列として呼び出し元メソッド名が埋め込まれるため、上記の例より性能が良いです。
- コンストラクター(Sub New)やプロパティ(Property)が呼び出し元の場合、通常フレームワークによって隠蔽されている名前を取得します。上掲の表を参照してください。
これでもできます。
Public Sub Test() Debug.WriteLine(NameOf(Test) & " を実行中です。") End Sub |
実行すると「Test を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
- プログラマーによって明示的に定義された名前のみを対象にできます。Sub New の New などは対象外です。
これでもできます。
Public Sub Test() Dim caller As New StackFrame(0, False) Debug.WriteLine(caller.GetMethod.Name & " を実行中です。") End Sub |
実行すると「Test を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
- コンストラクター(Sub New)やプロパティ(Property)の場合、通常フレームワークによって隠蔽されている名前を取得します。上掲の表を参照してください。
現在実行中のクラス名を取得する
Dim caller
As New
StackFrame(0,
False) Dim callerClassName As String = caller.GetMethod.DeclaringType.FullName Debug.WriteLine(callerClassName & " クラスを実行中です。") |
実行すると、たとえば「VBCoreTest.TestClass クラスを実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
現在実行中のファイル名を取得する
この例を実行するにはファイルの先頭の方に Imports System.Runtime.CompilerServices の記述が必要です。
Public Sub
Test() Debug.WriteLine(Me.GetCurrentSourceFileName & " ファイルを実行中です。") End Sub Public Function GetCurrentSourceFileName(<CallerFilePath> Optional callerFilePath As String = "") As String Return callerFilePath End Function |
実行すると、たとえば「C:\Users\rucio\Source\Repos\ConsoleApp1\TestClass.vb ファイルを実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
- ファイル名は、コンパイル時点でアセンブリ(exeファイルやdllファイル)内に文字列として埋め込まれます。そのため、開発者のパソコンとは異なるパソコンで実行しても、コンパイル時点で開発者のパソコンに存在していたソースコードのファイル名を取得します。ユーザー名など機密情報を含むパスを埋め込まないように注意してください。
現在実行中の行番号を取得する
次の例では、Debug.WriteLineの行の行番号をを出力します。
この例を実行するにはファイルの先頭の方に Imports System.Runtime.CompilerServices の記述が必要です。
Public Sub
Test() Debug.WriteLine(Me.GetCurrentLineNumber & " 行目を実行中です。") End Sub Public Function GetCurrentLineNumber(<CallerLineNumber> Optional callerLineNumber As Integer = 0) As Integer Return callerLineNumber End Function |
実行すると、たとえば「7 行目を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
これでもできます。
Public Sub Test() Dim caller As New StackFrame(0, True) Debug.WriteLine(caller.GetFileLineNumber & " 行目を実行中です。") End Sub |
実行すると、たとえば「7 行目を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
- VB2012以上の場合、上記の最初の例の方が優れています。この例を採用する理由はありません。
- デバッグビルド時のみ行数を取得できます。リリースビルドの場合行数は常に 0 になります。
参考:現在実行中のファイル名とメソッド名と行番号を取得する
この例を実行するにはファイルの先頭の方に Imports System.Runtime.CompilerServices の記述が必要です。
Public Sub
Test() Dim info = Me.GetCurrentMethodInfo '←この行の情報を取得します。 Debug.WriteLine($"{info.FilePath}ファイルの{info.MethodName}の{info.LineNumber}行目を実行中です。") End Sub Public Function GetCurrentMethodInfo(<CallerMemberName> Optional callerMethodName As String = "", <CallerFilePath> Optional callerFilePath As String = "", <CallerLineNumber> Optional callerLineNumber As Integer = -1) As (MethodName As String, FilePath As String, LineNumber As Integer) Return (callerMethodName, callerFilePath, callerLineNumber) End Function |
実行すると、たとえば「C:\Users\rucio\Source\Repos\ConsoleApp1\TestClass.vbファイルのTestの7行目を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所
VB6には同じ機能は用意されていません。