Informações do chamador (C# e Visual Basic)
Usando os atributos de informações do chamador, você pode obter informações sobre o chamador para um método.Você pode obter o caminho do arquivo do código-fonte, o número de linha no código-fonte e o nome do membro do chamador.Essas informações são úteis para rastreamento, depuração e criação de ferramentas de diagnóstico.
Para obter essas informações, você pode usar atributos que são aplicados para parâmetros opcionais, cada um deles tem um valor padrão.A tabela a seguir lista os atributos de informações do chamador que são definidos na System.Runtime.CompilerServices espaço para nome:
Atributo |
Descrição |
Tipo |
Caminho completo do arquivo de origem que contém o chamador.Este é o caminho do arquivo em tempo de compilação. |
String |
|
Número de linha no arquivo de origem em que o método for chamado. |
Integer |
|
Nome do método ou propriedade do chamador.Consulte Member Names posteriormente neste tópico. |
String |
Exemplo
O exemplo a seguir mostra como usar os atributos de informações do chamador.Em cada chamada para o TraceMessage método, as informações do chamador é substituído como argumentos para os parâmetros opcionais.
' Imports System.Runtime.CompilerServices
' Imports System.Diagnostics
Private Sub DoProcessing()
TraceMessage("Something happened.")
End Sub
Public Sub TraceMessage(message As String,
<CallerMemberName> Optional memberName As String = Nothing,
<CallerFilePath> Optional sourcefilePath As String = Nothing,
<CallerLineNumber()> Optional sourceLineNumber As Integer = 0)
Trace.WriteLine("message: " & message)
Trace.WriteLine("member name: " & memberName)
Trace.WriteLine("source file path: " & sourcefilePath)
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
// using System.Runtime.CompilerServices
// using System.Diagnostics;
public void DoProcessing()
{
TraceMessage("Something happened.");
}
public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}
// Sample Output:
// message: Something happened.
// member name: DoProcessing
// source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
// source line number: 31
Comentários
Você deve especificar um valor padrão explícita para cada parâmetro opcional.Você não pode aplicar atributos de informações do chamador para parâmetros que não são especificados como opcionais.
Os atributos de informações do chamador não fizer um parâmetro opcional.Em vez disso, elas afetam o valor padrão que é passado quando o argumento é omitido.
Valores de informações do chamador são emitidas como literais para a linguagem intermediária (IL) em tempo de compilação.Ao contrário dos resultados da StackTrace propriedade para exceções, os resultados não são afetadas por ofuscação.
Nomes de membros
Você pode usar o CallerMemberName atributo para evitar especificando o nome do membro como um String argumento para o método chamado.Usando essa técnica, você pode evitar o problema que A refatoração Renomear não altera o String valores.Esse benefício é especialmente útil para as seguintes tarefas:
Usando rotinas de rastreamento e diagnóstico.
Implementando o INotifyPropertyChanged interface quando a vinculação de dados.Essa interface permite que a propriedade de um objeto para notificar um controle acoplado que a propriedade é alterada, para que o controle pode exibir as informações atualizadas.Sem o CallerMemberName atributo, você deve especificar o nome da propriedade como um literal.
O gráfico a seguir mostra o membro nomes que são retornados ao usar o CallerMemberName atributo.
Chamadas ocorre dentro |
Resultado de nome de membro |
---|---|
Método, propriedade ou evento |
O nome do método, propriedade ou evento que originou a chamada. |
Construtor |
A seqüência de caracteres "ctor" |
Construtor estático |
A seqüência de caracteres "cctor" |
Destruidor |
A seqüência de caracteres "Finalizar" |
Operadores definidos pelo usuário ou conversões |
O nome gerado para o membro, por exemplo, "op_Addition". |
Construtor de atributo |
O nome do membro ao qual o atributo é aplicado.Se o atributo é qualquer elemento dentro de um membro (como um parâmetro, um valor de retorno ou um parâmetro de tipo genérico), esse resultado é o nome do membro que está associado a esse elemento. |
Nenhum membro continente (por exemplo, nível de assembly ou atributos que são aplicados a tipos) |
O valor padrão do parâmetro opcional. |
Consulte também
Referência
Conceitos
Atributos comuns (C# e Visual Basic)
Parâmetros opcionais (Visual Basic)
Argumentos nomeados e opcionais (guia de programação do C#)