Informacje o wywołującym

Przy użyciu atrybutów informacji o obiekcie wywołującym można uzyskać informacje o obiekcie wywołującym metodę. Można uzyskać ścieżkę pliku kodu źródłowego, numer wiersza kodu źródłowego i nazwę elementu członkowskiego obiektu wywołującego. Te informacje są przydatne do śledzenia, debugowania i tworzenia narzędzi diagnostycznych.

Aby uzyskać te informacje, należy użyć atrybutów stosowanych do opcjonalnych parametrów, z których każdy ma wartość domyślną. W poniższej tabeli wymieniono atrybuty info obiektu wywołującego zdefiniowane w przestrzeni nazw System.Runtime.CompilerServices :

Atrybut opis Type
CallerFilePath Pełna ścieżka pliku źródłowego zawierającego obiekt wywołujący. Jest to ścieżka pliku w czasie kompilacji. String
CallerLineNumber Numer wiersza w pliku źródłowym, w którym to wierszu jest wywoływana metoda. Integer
Callermembername Nazwa metody lub właściwości obiektu wywołującego. Zobacz sekcję Nazwy składowych w dalszej części tego tematu. String

Przykład

W poniższym przykładzie pokazano, jak można użyć tych atrybutów do śledzenia elementu wywołującego.

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}")

Uwagi

Atrybuty informacji o obiekcie wywołującym można zastosować tylko do parametrów opcjonalnych. Atrybuty informacji o obiekcie wywołującym powodują, że kompilator zapisuje odpowiednią wartość dla każdego opcjonalnego parametru ozdobionego atrybutem Info elementu wywołującego.

Wartości informacji o obiekcie wywołującym są emitowane jako literały do języka pośredniego (IL, Intermediate Language) w czasie kompilacji. W przeciwieństwie do wyników właściwości StackTrace dla wyjątków wyniki nie mają wpływu na zaciemnianie.

Można jawnie dostarczyć opcjonalne argumenty do sterowania informacjami o obiekcie wywołującym lub ukryć te informacje.

Nazwy elementów członkowskich

Możesz użyć atrybutu CallerMemberName , aby uniknąć określania nazwy elementu członkowskiego jako String argumentu do wywoływanej metody. Korzystając z tej techniki, należy uniknąć problemu, który refaktoryzacja zmiany nazwy nie zmienia String wartości. Jest to szczególnie przydatne w następujących zadaniach:

  • Używanie procedur do śledzenia i diagnostycznych.
  • Implementowanie interfejsu INotifyPropertyChanged podczas wiązania danych. Ten interfejs umożliwia właściwości obiektu powiadamianie powiązanego formantu, że właściwość zmieniła się, dzięki czemu formant może wyświetlić zaktualizowane informacje. Bez atrybutu CallerMemberName należy określić nazwę właściwości jako literał.

Na poniższym wykresie przedstawiono nazwy elementów członkowskich zwracane podczas używania atrybutu CallerMemberName.

Wywołanie ma miejsce w Wynikowa nazwa elementu członkowskiego
Metoda, właściwość lub zdarzenie Nazwa metody, właściwości lub zdarzenia, gdzie zainicjowane było wywołanie.
Konstruktor Ciąg „.ctor”
Statyczny konstruktor Ciąg „.cctor”
Destruktor Ciąg „Finalize”.
Zdefiniowane przez użytkownika operatory lub konwersje Nazwa wygenerowana dla elementu członkowskiego, na przykład „op_Addition”.
Konstruktor atrybutu Nazwa elementu członkowskiego, do którego został zastosowany atrybut. Jeśli atrybut jest dowolnym elementem elementu członkowskiego (takim jak parametr, wartość zwracana lub parametr typu ogólnego), to wynikiem jest nazwa elementu członkowskiego, który jest skojarzony z tym elementem.
Brak nadrzędnego elementu członkowskiego (na przykład poziom zestawu lub atrybuty, które są stosowane do typów) Wartość domyślna opcjonalnego parametru.

Zobacz też