Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0100: Aufrufende Methode ermitteln

 von 

Beschreibung

Dieser Tipp zeigt, wie man die aufrufende Methode mithilfe der StackTrace-Klasse ermitteln kann. Dies kann beispielsweise für Logs praktisch sein.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2003, Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [8,14 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    Aus
' Option Explicit:  An
' Option Infer:     An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'  - System.Data.DataSetExtensions
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Diagnostics
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################ Module1.vb ##################################
' ##############################################################################
Imports System.Reflection
Imports System.Diagnostics

Module Module1

    Sub Main()
        Test1()
        Test2()

        Console.ReadLine()
    End Sub

    Sub Test1()
        Console.WriteLine("Test1 wurde aufgerufen von " & _
            Module1.GetCallingMethod().Name)
        Test2()
    End Sub

    Sub Test2()
        Console.WriteLine("Test2 wurde aufgerufen von " & _
            Module1.GetCallingMethod().Name)
    End Sub

    ''' <summary>
    ''' Gibt die Methode zurück, die die gerade ausgeführte Methode aufgerufen 
    '''  hat.
    ''' </summary>
    ''' <param name="index"> 
    '''  Gibt an, der wievielte Aufrufer zurückgegeben werden soll.
    ''' </param>
    ''' <returns>Ein Objekt vom Typ System.Reflection.MethodBase.</returns>
    Public Function GetCallingMethod( _
        Optional ByVal index As Integer = 0) As MethodBase

        Dim stackTrace As New StackTrace()

        If index < 0 Then Throw New ArgumentException( _
            "Index must not be a negative number.", "index")
        If stackTrace.GetFrames().Count <= 2 + index Then _
            Throw New Exception("There aren't that much method calls.")

        Return stackTrace.GetFrame(2 + index).GetMethod()
    End Function

End Module

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von timo am 05.01.2010 um 17:45

Genial. Ich hab den Tipp mal gelesen. Habe nun 1h nach dem Artikel gesucht und endlich gefunden.
Herzlichen Dank. stackTrace.GetFrames().Count muss stackTrace.GetFrames.Length heissen. Das ist der einzige kleine Fehler. Ich musste auch den DeclaringType verwenden. Also Me.GetCallingMethod().DeclaringType.Name. Gruss Timo