Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Mediante los atributos de información del llamador, se puede obtener información sobre el llamador de un método. Puede obtener la ruta de acceso al código fuente, el número de línea en el código fuente y el nombre de miembro del llamador. Esta información es útil para el seguimiento, la depuración y la creación de herramientas de diagnóstico.
Para obtener esta información, se usan atributos que se aplican a parámetros opcionales, cada uno de los cuales tiene un valor predeterminado. En la tabla siguiente se enumeran los atributos De información del autor de la llamada definidos en el espacio de nombres System.Runtime.CompilerServices :
| Atributo | Descripción | Tipo |
|---|---|---|
| CallerFilePath | Ruta de acceso completa del archivo de código fuente que contiene el llamador. Esta es la ruta de acceso del archivo en tiempo de compilación. | String |
| CallerLineNumber | Número de línea del archivo de origen donde se llama al método. | Integer |
| CallerMemberName | Método o nombre de propiedad del llamador. Consulte la sección Nombres de miembro más adelante en este tema. | String |
Ejemplo
En el ejemplo siguiente se muestra cómo puede usar estos atributos para realizar un seguimiento de un autor de llamada.
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}")
Observaciones
Los atributos info del autor de la llamada solo se pueden aplicar a parámetros opcionales. Los atributos De información del llamador hacen que el compilador escriba el valor adecuado para cada parámetro opcional decorado con un atributo De información del llamador.
Los valores de información del autor de la llamada se emiten como literales en el lenguaje intermedio (IL) en tiempo de compilación. A diferencia de los resultados de la propiedad StackTrace para las excepciones, los resultados no se ven afectados por ofuscación.
Puede proporcionar explícitamente los argumentos opcionales para controlar la información del autor de la llamada o ocultar la información del autor de la llamada.
Nombres de miembro
Puede usar el CallerMemberName atributo para evitar especificar el nombre de miembro como argumento String para el método llamado. Al usar esta técnica, se evita el problema de que cambiar el nombre de la refactorización no cambia los String valores. Esta ventaja es especialmente útil para las siguientes tareas:
- Uso de rutinas de seguimiento y diagnóstico.
- Implementación de la interfaz INotifyPropertyChanged al enlazar datos. Esta interfaz permite que la propiedad de un objeto notifique a un control enlazado que la propiedad ha cambiado, de modo que el control pueda mostrar la información actualizada. Sin el atributo
CallerMemberName, se debe especificar el nombre de propiedad como un literal.
En el gráfico siguiente se muestran los nombres de miembro que se devuelven al usar el atributo CallerMemberName.
| Las llamadas se producen en | Resultado del nombre de miembro |
|---|---|
| Método, propiedad o evento | Nombre del método, propiedad o evento desde el que se originó la llamada. |
| Constructor | Cadena ".ctor" |
| Constructor estático | Cadena ".cctor" |
| Destructor | Cadena "Finalize" |
| Operadores o conversiones definidos por el usuario | Nombre generado para el miembro, por ejemplo, "op_Addition". |
| Constructor de atributos | Nombre del miembro al que se aplica el atributo. Si el atributo es cualquier elemento dentro de un miembro (como un parámetro, un valor devuelto o un parámetro de tipo genérico), este resultado es el nombre del miembro asociado a ese elemento. |
| Ningún miembro contenedor (por ejemplo, nivel de ensamblado o atributos que se aplican a tipos) | Valor predeterminado del parámetro opcional. |