De que se trata o artigo

Neste artigo veremos um conjunto de classes chamado Caller Information que é utilizado para obter informações sobre o código que está sendo executado. Dentre as informações disponibilizadas pela Caller Information está o nome do método que fez a chamada, o nome do seu arquivo no projeto e a linha de código.

Em que situação o tema é útil

O Caller Information é utilizado no cenário em que se deseja rastrear a execução do programa e não se dispõe do Visual Studio instalado, por exemplo, em um ambiente de produção. Desta forma, é possível ter detalhes sobre a execução do programa, que serão úteis na resolução de problemas.

Debug sem Visual Studio

No .Net Framework 4.5 e o C# 5.0 foi acrescentado um conjunto de classes chamado Caller Information cujo objetivo é obter informações durante o runtime, sem a necessidade de utilizar ferramentas externas ou uso de breakpoint, como por exemplo, o Visual Studio.

As classes que compõem a Caller Infomation são: CallerMemberNameAtributte, CallerFilePathAttribute e CallerLineNumberAttribute e estão localizadas na biblioteca System.Runtime.CompilerServices. A seguir será descrito cada uma delas.

1. CallerMemberNameAttribute: Armazena o nome do método que fez a chamada para o método no qual este objeto está sendo usado como argumento.

2. CallerFilePathAttribute: Retorna o caminho completo do arquivo correspondente a classe onde o método que fez o chamado para o método atual está localizado.

3. CallerLineNumberAttribute: Armazena a linha de código do método que fez o chamado ao método atual dentro do código.

Estes elementos devem ser usados como atributos e argumentos opcionais de métodos onde se deseja recuperar estes dados. Deve-se obrigatoriamente (como ocorre em argumentos opcionais) passar valores default para estes parâmetros, conforme exposto na Listagem 1.

Listagem 1. Exemplo de utilização de CallerMemberName, CallerFilePath e CallerLineNumber


  1 private Dictionary<string, int> Sort(Dictionary<string, int> dic,
  2 [CallerMemberName] string memberName = "",
  3 [CallerFilePath] string sourceFilePath = "",
  4 [CallerLineNumber] int lineNumber = 0)
  5 {
  6 
  7 }

Embora no exemplo (e no projeto desenvolvido mais à frente) tenham sido usados todos os atributos, você não precisa usar todos ao mesmo tempo. Além disto, é possível também passar valores na chamada do método.

Se forem omitidos valores na chamada do método, estes irão capturar o nome do método, o nome do arquivo e a linha para o método atual, caso contrário, os valores usados são os que você informar nestes atributos.

Tanto a documentação como os exemplos existentes para este recurso ainda são poucos, uma vez que não foi feito ainda oficialmente o lançamento da nova versão do Visual Studio, logo, pode ser que haja mudanças.

Um projeto de exemplo

A proposta do projeto é exemplificar o uso das classes do Caller Information, logo a aplicação exibida é bem simples. Seu objetivo é contar quantas vezes determinadas palavras aparecem em texto, exibir um relatório informando: a palavra mais contada, a palavra menos contada, o número de vezes que a palavra mais contada foi utilizada no texto e o número de vezes que a palavra menos contada foi utilizada no texto. A janela principal da aplicação pode ser observada na ...

Quer ler esse conteúdo completo? Tenha acesso completo