Informatie over beller
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 naamruimte System.Runtime.CompilerServices :
Kenmerk | Beschrijving | Type |
---|---|---|
CallerFilePath | Volledig pad van het bronbestand dat de aanroeper bevat. Dit is het bestandspad tijdens het compileren. | String |
CallerLineNumber | Regelnummer in het bronbestand waarop de methode wordt aangeroepen. | Integer |
CallerMemberName | Methode of eigenschapsnaam van de aanroeper. Zie de sectie Ledennamen verderop in dit onderwerp. | String |
Opmerking
In het volgende voorbeeld ziet u hoe u deze kenmerken kunt gebruiken om een aanroeper te traceren.
open System.Diagnostics
open System.Runtime.CompilerServices
open System.Runtime.InteropServices
type Tracer() =
member _.DoTrace(message: string,
[<CallerMemberName; Optional; DefaultParameterValue("")>] memberName: string,
[<CallerFilePath; Optional; DefaultParameterValue("")>] path: string,
[<CallerLineNumber; Optional; DefaultParameterValue(0)>] line: int) =
Trace.WriteLine(sprintf $"Message: {message}")
Trace.WriteLine(sprintf $"Member name: {memberName}")
Trace.WriteLine(sprintf $"Source file path: {path}")
Trace.WriteLine(sprintf $"Source line number: {line}")
Opmerkingen
Kenmerken van aanroepergegevens kunnen alleen worden toegepast op optionele parameters. De kenmerken Info van de aanroeper zorgen ervoor dat de compiler de juiste waarde schrijft voor elke optionele parameter die is ingericht met het kenmerk Info van de aanroeper.
Waarden voor aanroepergegevens worden tijdens het compileren verzonden als letterlijke waarden in de Tussenliggende taal (IL). In tegenstelling tot de resultaten van de eigenschap StackTrace 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.
- De INotifyPropertyChanged-interface implementeren bij bindingsgegevens. 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 kenmerk CallerMemberName 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. |