Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
С помощью атрибутов сведений о вызывающем методе можно получить информацию о вызывающей стороне. Вы можете получить путь к файлу исходного кода, номер строки в исходном коде и имя участника вызывающего объекта. Эта информация полезна для трассировки, отладки и создания средств диагностики.
Чтобы получить эти сведения, используйте атрибуты, применяемые к необязательным параметрам, каждый из которых имеет значение по умолчанию. В следующей таблице перечислены атрибуты сведений о вызывающем объекте, определенные в пространстве имен 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». |
| Конструктор атрибутов | Имя элемента, к которому применяется атрибут. Если атрибут является любым элементом в элементе (например, параметром, возвращаемым значением или параметром универсального типа), это имя элемента, связанного с этим элементом. |
| Отсутствие содержащего элемента (например, уровня сборки или атрибутов, применяемых к типам) | Значение по умолчанию необязательного параметра. |