Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
С помощью атрибутов сведений о вызывающем методе можно получить информацию о вызывающей стороне. Вы можете получить путь к файлу исходного кода, номер строки в исходном коде и имя участника вызывающего объекта. Эта информация полезна для трассировки, отладки и создания средств диагностики.
Чтобы получить эти сведения, используйте атрибуты, применяемые к необязательным параметрам, каждый из которых имеет значение по умолчанию. В следующей таблице перечислены атрибуты сведений о вызывающем объекте, определенные в пространстве имен System.Runtime.CompilerServices.
Свойство | Описание | Тип |
---|---|---|
CallerFilePathAttribute | Полный путь к исходному файлу, который содержит вызывающий объект. Это путь к файлу во время компиляции. | String |
CallerLineNumberAttribute | Номер строки в исходном файле, в котором вызывается метод. | Integer |
CallerMemberNameAttribute | Имя метода или свойства вызывающего. См. имена участников далее в этом разделе. | String |
CallerArgumentExpressionAttribute | Выражение, используемое вызывающей стороной для аргументации. См. статью "Выражения вызывающего абонента " далее в этом разделе. | String |
Пример
В следующем примере показано, как использовать атрибуты сведений о вызывающем объекте. При каждом вызове метода информация о вызывающем подставляется в аргументы необязательных параметров.
Private Sub DoProcessing()
TraceMessage("Something happened.")
End Sub
Public Sub TraceMessage(message As String,
<System.Runtime.CompilerServices.CallerMemberName> Optional memberName As String = Nothing,
<System.Runtime.CompilerServices.CallerFilePath> Optional sourcefilePath As String = Nothing,
<System.Runtime.CompilerServices.CallerLineNumber()> Optional sourceLineNumber As Integer = 0)
System.Diagnostics.Trace.WriteLine("message: " & message)
System.Diagnostics.Trace.WriteLine("member name: " & memberName)
System.Diagnostics.Trace.WriteLine("source file path: " & sourcefilePath)
System.Diagnostics.Trace.WriteLine("source line number: " & sourceLineNumber)
End Sub
' Sample output:
' message: Something happened.
' member name: DoProcessing
' source file path: C:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoVB\CallerInfoVB\Form1.vb
' source line number: 15
Замечания
Необходимо указать явное значение по умолчанию для каждого необязательного параметра. Атрибуты сведений о вызывающем объекте нельзя применять к параметрам, которые не указаны как необязательные.
Атрибуты информации о вызывающем объекте не делают параметр необязательным. Вместо этого они влияют на значение по умолчанию, передаваемое при опущении аргумента.
Значения информации о вызывающем интегрируются в виде литералов в промежуточный язык (IL) на этапе компиляции. В отличие от результатов свойства StackTrace для исключений, результаты не зависят от скрытия.
Вы можете явно указать необязательные аргументы для управления информацией о вызывающем абоненте или скрытия информации о вызывающем абоненте.
Имена членов
Атрибут можно использовать CallerMemberName
, чтобы избежать указания имени члена в качестве String
аргумента вызываемого метода. С помощью этого метода можно избежать проблемы, что Рефакторинг Переименования не изменяет значения String
. Это преимущество особенно полезно для следующих задач:
Использование процедур трассировки и диагностики.
Реализация интерфейса INotifyPropertyChanged при привязке данных. Этот интерфейс позволяет свойству объекта уведомлять привязанный элемент управления о том, что свойство изменилось, чтобы элемент управления отображал обновленные сведения. Без атрибута
CallerMemberName
необходимо указать как литерал имя свойства.
На следующей диаграмме показаны имена элементов, возвращаемые при использовании атрибута CallerMemberName
.
Вызовы происходят в пределах | Результат имени участника |
---|---|
Метод, свойство или событие | Имя метода, свойства или события, из которого исходит вызов. |
Конструктор | строка ".ctor" |
Статический конструктор | Строка ".cctor" |
Разрушитель | Строка "Завершить" |
Определяемые пользователем операторы или преобразования | Генерированное имя члена, например «op_Addition». |
Конструктор атрибутов | Имя элемента, к которому применяется атрибут. Если атрибут является любым элементом в элементе (например, параметром, возвращаемым значением или параметром универсального типа), это имя элемента, связанного с этим элементом. |
Отсутствие содержащего элемента (например, уровня сборки или атрибутов, применяемых к типам) | Значение по умолчанию необязательного параметра. |
Выражения вызывающего абонента
Вы используете, System.Runtime.CompilerServices.CallerArgumentExpressionAttribute когда вы хотите записать выражение, используемое для аргумента. Библиотекам диагностики может потребоваться предоставить дополнительные сведения о выражениях, переданных в качестве аргументов. Предоставляя выражение, которое вызвало диагностику, а также имя параметра, разработчики получают более подробную информацию об условии, которое вызвало диагностику. Эта дополнительная информация упрощает исправление. В следующем методе CallerArgumentExpressionAttribute используется для отображения условия, которое должно быть True
:
Public Shared Sub ValidateArgument(ByVal parameterName As String,
ByVal condition As Boolean,
<CallerArgumentExpression("condition")> ByVal Optional message As String? = Nothing)
If Not condition Then
Throw New ArgumentException($"Argument failed validation: <{message}>", parameterName)
End If
End Sub