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