Informações do chamador

Ao usar atributos de informações do chamador, você pode obter informações sobre o chamador de um método. Você pode obter o caminho do arquivo do código-fonte, o número da linha no código-fonte e o nome do membro do chamador. Essas informações são úteis para fins de rastreamento, depuração e criação de ferramentas de diagnóstico.

Para obter essas informações, você deve usar os atributos que são aplicadas aos parâmetros opcionais, cada qual com um valor padrão. A tabela a seguir lista os atributos de informações do chamador que são definidos no namespace System.Runtime.CompilerServices:

Atributo Descrição Type
CallerFilePath O caminho completo do arquivo de origem que contém o chamador. Esse é o caminho do arquivo no momento da compilação. String
CallerLineNumber Número da linha no arquivo fonte no qual o método é chamado. Integer
CallerMemberName Nome do método ou da propriedade do chamador. Consulte a seção Nomes de Membros posteriormente neste tópico. String

Exemplo

O exemplo a seguir mostra como você pode usar esses atributos para rastrear um chamador.

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}")

Comentários

Os atributos de Informações do chamador só podem ser aplicados a parâmetros opcionais. Os atributos de informações do chamador fazem com que o compilador escreva o valor adequado para cada parâmetro opcional decorado com um atributo de Informações do Chamador.

Os valores de informações do chamador são emitidos como literais em linguagem intermediária (IL) em tempo de compilação. Ao contrário dos resultados da propriedade StackTrace para exceções, os resultados não são afetados pela ofuscação.

Você pode fornecer explicitamente os argumentos opcionais para controlar as informações do chamador ou ocultá-las.

Nomes dos membros

Você pode usar o atributo CallerMemberName para evitar especificar o nome do membro como um argumento String ao método chamado. Ao usar essa técnica, você evita o problema de que a Refatoração de Renomeação não altera os valores de String. Esse benefício é especialmente útil para as seguintes tarefas:

  • Usar rotinas de rastreamento e diagnóstico.
  • Implementar a interface INotifyPropertyChanged ao associar dados. Essa interface permite que a propriedade de um objeto notifique um controle associado sobre a alteração da propriedade de modo que o controle possa exibir as informações atualizadas. Sem o atributo CallerMemberName, você deve especificar o nome da propriedade como um literal.

O gráfico a seguir mostra os nomes de membros que são retornados quando você usa o atributo CallerMemberName.

As chamadas ocorrem em Resultado de nome de membro
Método, propriedade ou evento O nome do método, da propriedade ou do evento em que a chamada foi originada.
Construtor A cadeia de caracteres “.ctor”
Construtor estático A cadeia de caracteres “.cctor”
Destruidor A cadeia de caracteres "Finalize"
Operadores usuário ou conversões definidos pelo usuário O nome gerado para o membro, por exemplo, “op_Addition”.
Construtor de atributos O nome do membro ao qual o atributo se aplica. 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 associado a esse elemento.
Nenhum membro contentor (por exemplo, nível de assembly ou atributos que são aplicadas aos tipos) O valor padrão do parâmetro opcional.

Confira também