Share via


Aanroepergegevens (Visual Basic)

Met behulp van kenmerken voor bellergegevens kunt u informatie over de aanroeper voor een methode verkrijgen. U kunt het bestandspad van de broncode, het regelnummer in de broncode en de lidnaam van de aanroeper verkrijgen. Deze informatie is handig voor tracering, foutopsporing en het maken van diagnostische hulpprogramma's.

Voor het verkrijgen van deze informatie gebruikt u kenmerken die worden toegepast op optionele parameters, die elk een standaardwaarde hebben. In de volgende tabel ziet u de kenmerken Van nummerweergave die zijn gedefinieerd in de System.Runtime.CompilerServices naamruimte:

Kenmerk Beschrijving Type
CallerFilePathAttribute Volledig pad van het bronbestand dat de aanroeper bevat. Dit is het bestandspad tijdens het compileren. String
CallerLineNumberAttribute Regelnummer in het bronbestand waarop de methode wordt aangeroepen. Integer
CallerMemberNameAttribute Methode of eigenschapsnaam van de aanroeper. Zie ledennamen verderop in dit onderwerp. String
CallerArgumentExpressionAttribute Expressie die wordt gebruikt door de aanroeper voor een argument. Zie aanroeperexpressies verderop in dit onderwerp. String

Opmerking

In het volgende voorbeeld ziet u hoe u kenmerken van nummerweergave gebruikt. Bij elke aanroep naar de TraceMessage methode wordt de aanroepergegevens vervangen als argumenten voor de optionele parameters.

Private Sub DoProcessing()  
    TraceMessage("Something happened.")  
End Sub  
  
Public Sub TraceMessage(message As String,  
        <System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing,  
        <System.Runtime.CompilerServices.CallerFilePath> Optional sourcefilePath As String = Nothing,  
        <System.Runtime.CompilerServices.CallerLineNumber()> Optional sourceLineNumber As Integer = 0)  
  
    System.Diagnostics.Trace.WriteLine("message: " & message)  
    System.Diagnostics.Trace.WriteLine("member name: " & memberName)  
    System.Diagnostics.Trace.WriteLine("source file path: " & sourcefilePath)  
    System.Diagnostics.Trace.WriteLine("source line number: " & sourceLineNumber)  
End Sub  
  
' Sample output:  
'   message: Something happened.  
'   member name: DoProcessing  
'   source file path: C:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoVB\CallerInfoVB\Form1.vb  
'   source line number: 15  

Opmerkingen

U moet een expliciete standaardwaarde opgeven voor elke optionele parameter. U kunt geen kenmerken van nummerweergave toepassen op parameters die niet als optioneel zijn opgegeven.

De kenmerken Info van de aanroeper maken geen parameter optioneel. In plaats daarvan hebben ze invloed op de standaardwaarde die wordt doorgegeven wanneer het argument wordt weggelaten.

Waarden voor aanroepergegevens worden tijdens het compileren verzonden als letterlijke waarden in de Tussenliggende taal (IL). In tegenstelling tot de resultaten van de StackTrace eigenschap voor uitzonderingen, worden de resultaten niet beïnvloed door verdoezeling.

U kunt expliciet de optionele argumenten opgeven om de gegevens van de beller te beheren of om aanroepergegevens te verbergen.

Ledennamen

U kunt het CallerMemberName kenmerk gebruiken om te voorkomen dat u de lidnaam opgeeft als argument String voor de aangeroepen methode. Door deze techniek te gebruiken, voorkomt u het probleem dat herstructureren de waarden niet wijzigt String . Dit voordeel is vooral handig voor de volgende taken:

  • Tracering en diagnostische routines gebruiken.

  • INotifyPropertyChanged De interface implementeren bij het binden van gegevens. Met deze interface kan de eigenschap van een object een afhankelijk besturingselement melden dat de eigenschap is gewijzigd, zodat het besturingselement de bijgewerkte informatie kan weergeven. Zonder het CallerMemberName kenmerk moet u de naam van de eigenschap opgeven als een letterlijke waarde.

In de volgende grafiek ziet u de ledennamen die worden geretourneerd wanneer u het CallerMemberName kenmerk gebruikt.

Aanroepen vindt plaats binnen Resultaat van lidnaam
Methode, eigenschap of gebeurtenis De naam van de methode, eigenschap of gebeurtenis waaruit de aanroep afkomstig is.
Constructor De tekenreeks ".ctor"
Statische constructor De tekenreeks '.cctor'
Destructor De tekenreeks 'Finalize'
Door de gebruiker gedefinieerde operators of conversies De gegenereerde naam voor het lid, bijvoorbeeld 'op_Addition'.
Kenmerkconstructor De naam van het lid waarop het kenmerk wordt toegepast. Als het kenmerk een element binnen een lid is (zoals een parameter, een retourwaarde of een algemene typeparameter), is dit resultaat de naam van het lid dat aan dat element is gekoppeld.
Geen lid (bijvoorbeeld assemblyniveau of kenmerken die worden toegepast op typen) De standaardwaarde van de optionele parameter.

Aanroeperexpressies

U gebruikt de System.Runtime.CompilerServices.CallerArgumentExpressionAttribute expressie die wordt gebruikt voor een argument, wanneer u de expressie wilt vastleggen die wordt gebruikt voor een argument. Diagnostische bibliotheken willen mogelijk meer informatie geven over de expressies die als argumenten worden doorgegeven. Door de expressie op te geven die de diagnose heeft geactiveerd, hebben ontwikkelaars naast de parameternaam meer informatie over de voorwaarde die de diagnose heeft geactiveerd. Deze extra informatie maakt het gemakkelijker om dit op te lossen. De volgende methode gebruikt de CallerArgumentExpressionAttribute methode om de voorwaarde weer te geven die moet zijn True:

Public Shared Sub ValidateArgument(ByVal parameterName As String,
ByVal condition As Boolean,
<CallerArgumentExpression("condition")> ByVal Optional message As String? = Nothing)
    If Not condition Then
        Throw New ArgumentException($"Argument failed validation: <{message}>", parameterName)
    End If
End Sub

Zie ook