Partilhar via


Informações do chamador

Usando os atributos Caller Info, 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 da linha no código-fonte e o nome do membro do chamador. Essas informações são úteis para rastrear, depurar e criar ferramentas de diagnóstico.

Para obter essas informações, use atributos que são aplicados a parâmetros opcionais, cada um dos quais tem um valor padrão. A tabela a seguir lista os atributos Caller Info definidos no namespace System.Runtime.CompilerServices :

Atributo Description Type
CallerFilePath Caminho completo do arquivo de origem que contém o chamador. Este é o caminho do arquivo em tempo de compilação. String
CallerLineNumber Número da linha no arquivo de origem no qual o método é chamado. Integer
CallerMemberName Nome do método ou propriedade do chamador. Consulte a seção Nomes dos membros mais adiante 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}")

Observações

Os atributos Caller Info só podem ser aplicados a parâmetros opcionais. Os atributos Caller Info fazem com que o compilador escreva o valor adequado para cada parâmetro opcional decorado com um atributo Caller Info.

Os valores de Informações do chamador são emitidos como literais para a 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 ocultar as informações do chamador.

Nomes dos membros

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

  • Utilização de rotinas de rastreio e diagnóstico.
  • Implementando a interface INotifyPropertyChanged ao vincular dados. Essa interface permite que a propriedade de um objeto notifique um controle acoplado de que a propriedade foi alterada, para que o controle possa 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 os nomes de membros que são retornados quando você usa o atributo CallerMemberName.

As chamadas ocorrem dentro de Resultado do nome do membro
Método, propriedade ou evento O nome do método, propriedade ou evento do qual a chamada se originou.
Construtor A cadeia de caracteres ".ctor"
Construtor estático A cadeia de caracteres ".cctor"
Destruidor A string "Finalizar"
Operadores ou conversões definidos pelo usuário O nome gerado para o membro, por exemplo, "op_Addition".
Construtor Attribute O nome do membro ao qual o atributo é aplicado. Se o atributo for qualquer elemento dentro de um membro (como um parâmetro, um valor de retorno ou um parâmetro de tipo genérico), esse resultado será o nome do membro associado a esse elemento.
Nenhum membro contendo (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