ヘッダー
Visual Basic サンプル集
VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

現在実行中のメソッド名などの情報を取得する

2020/11/8

→ C# のサンプルに切り替える

 

 

現在実行中のメソッド名を取得する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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 の記述が必要です。

VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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)が呼び出し元の場合、通常フレームワークによって隠蔽されている名前を取得します。上掲の表を参照してください。

これでもできます。

VB2015対応 VB2017対応 VB2019対応

Public Sub Test()

    Debug.WriteLine(NameOf(Test) & " を実行中です。")

End Sub

実行すると「Test を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所

  • プログラマーによって明示的に定義された名前のみを対象にできます。Sub New の New などは対象外です。

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

Public Sub Test()

    Dim caller As New StackFrame(0, False)
    Debug.WriteLine(caller.GetMethod.Name & " を実行中です。")

End Sub

実行すると「Test を実行中です。」と表示されます。→ Debug.WriteLineが表示される場所

  • コンストラクター(Sub New)やプロパティ(Property)の場合、通常フレームワークによって隠蔽されている名前を取得します。上掲の表を参照してください。

 

 

現在実行中のクラス名を取得する

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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 の記述が必要です。

VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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 の記述が必要です。

VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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が表示される場所

 

これでもできます。

VB.NET2002対応 VB.NET2003対応 VB2005対応 VB2008対応 VB2010対応 VB2012対応 VB2013対応 VB2015対応 VB2017対応 VB2019対応

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 の記述が必要です。

VB2017対応 VB2019対応

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対応 VB6には同じ機能は用意されていません。