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.

Zie ook