Compartilhar via


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

CallerFilePathAttribute

Caminho completo do arquivo de origem que contém o chamador.Este é o caminho do arquivo em tempo de compilação.

String

CallerLineNumberAttribute

Número de linha no arquivo de origem em que o método for chamado.

Integer

CallerMemberNameAttribute

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.

Hh534540.collapse_all(pt-br,VS.110).gifNomes 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

Atributos (C# e Visual Basic)

Conceitos

Atributos comuns (C# e Visual Basic)

Parâmetros opcionais (Visual Basic)

Argumentos nomeados e opcionais (guia de programação do C#)

Outros recursos

Conceitos de programação