Поделиться через


Сведения о вызывающем объекте

С помощью атрибутов сведений о вызывающем методе можно получить информацию о вызывающей стороне. Вы можете получить путь к файлу исходного кода, номер строки в исходном коде и имя участника вызывающего объекта. Эта информация полезна для трассировки, отладки и создания средств диагностики.

Чтобы получить эти сведения, используйте атрибуты, применяемые к необязательным параметрам, каждый из которых имеет значение по умолчанию. В следующей таблице перечислены атрибуты сведений о вызывающем объекте, определенные в пространстве имен System.Runtime.CompilerServices :

Свойство Описание Тип
CallerFilePath Полный путь к исходному файлу, который содержит вызывающий объект. Это путь к файлу во время компиляции. String
CallerLineNumber Номер строки в исходном файле, в котором вызывается метод. Integer
CallerMemberName Имя метода или свойства вызывающего. См. раздел "Имена участников" далее в этом разделе. String

Пример

В следующем примере показано, как использовать эти атрибуты для трассировки вызывающего объекта.

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

Замечания

Атрибуты сведений о вызывающем объекте могут применяться только к необязательным параметрам. Атрибуты сведений вызывающего абонента приводят к тому, что компилятор записывает правильное значение для каждого необязательного параметра, украшенного атрибутом Caller Info.

Значения информации о вызывающем интегрируются в виде литералов в промежуточный язык (IL) на этапе компиляции. В отличие от результатов свойства StackTrace для исключений, результаты не затрагиваются с помощью маскировки.

Вы можете явно указать необязательные аргументы для управления информацией о вызывающем абоненте или скрытия информации о вызывающем абоненте.

Имена членов

Атрибут можно использовать CallerMemberName , чтобы избежать указания имени члена в качестве String аргумента вызываемого метода. С помощью этого метода можно избежать проблемы, из-за которой переименовывать String рефакторинг не изменяются значения. Это преимущество особенно полезно для следующих задач:

  • Использование процедур трассировки и диагностики.
  • Реализация интерфейса INotifyPropertyChanged при привязке данных. Этот интерфейс позволяет свойству объекта уведомлять привязанный элемент управления о том, что свойство изменилось, чтобы элемент управления отображал обновленные сведения. Без атрибута CallerMemberName необходимо указать как литерал имя свойства.

На следующей диаграмме показаны имена элементов, возвращаемые при использовании атрибута CallerMemberName.

Вызовы происходят в пределах Результат имени участника
Метод, свойство или событие Имя метода, свойства или события, из которого исходит вызов.
Конструктор строка ".ctor"
Статический конструктор Строка ".cctor"
Разрушитель Строка "Завершить"
Определяемые пользователем операторы или преобразования Генерированное имя члена, например «op_Addition».
Конструктор атрибутов Имя элемента, к которому применяется атрибут. Если атрибут является любым элементом в элементе (например, параметром, возвращаемым значением или параметром универсального типа), это имя элемента, связанного с этим элементом.
Отсутствие содержащего элемента (например, уровня сборки или атрибутов, применяемых к типам) Значение по умолчанию необязательного параметра.

См. также