Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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 bevat de bellerinformatie-kenmerken die zijn gedefinieerd in de System.Runtime.CompilerServices naamruimte:
| Eigenschap | Beschrijving | Typologie |
|---|---|---|
| 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 |
Voorbeeld
In het volgende voorbeeld ziet u hoe u gebruikmaakt van Caller Info-attributen. 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 Caller Info-attributen toepassen op parameters die niet als optioneel zijn opgegeven.
De Caller Info-kenmerken maken een parameter niet 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 Hernoemen Refactoring de String waarden niet wijzigt. Dit voordeel is vooral handig voor de volgende taken:
Tracerings- en diagnostische processen gebruiken.
De interface INotifyPropertyChanged 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
CallerMemberNamekenmerk 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. |
| Constructeur | De tekenreeks ".ctor" |
| Statische constructor | De tekenreeks '.cctor' |
| Destruktor | De tekst "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 omvattend lid (bijvoorbeeld assembly-niveau of kenmerken toegepast op typen) | De standaardwaarde van de optionele parameter. |
Aanroeperexpressies
U gebruikt de System.Runtime.CompilerServices.CallerArgumentExpressionAttribute wanneer u de expressie van een argument wilt vastleggen. 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