es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Existe alguna forma de hacer que un atributo personalizado de C# genere un mensaje durante la compilación?

Un colega mío está utilizando ObsoleteAttribute en los métodos aún no implementados para que recibamos una advertencia en tiempo de compilación.

Sin embargo, como un método por implementar está en el lugar exactamente opuesto a uno obsoleto, eso me molesta.

No veo un NotYetImplementedButPleaseBePatientWeVeGotLoadsOfOtherThingsToDoAsWellAttribute en la documentación, por lo que tal vez podríamos crear uno.

ObsoleteAttribute es sealed, por lo que no podemos heredarlo. (Sí, descubrí eso cuando lo intenté. Bonito intento, yo.)

¿Existe otra manera de imitar ObsoleteAttribute, pero con un nombre más apropiado?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay otra forma de crear un atributo personalizado que imite el comportamiento de ObsoleteAttribute. Puedes crear un nuevo atributo personalizado utilizando el atributo [AttributeUsage] para especificar dónde se puede aplicar y [Conditional("COMPILE_TIME")] para asegurarte de que sólo se ejecute en tiempo de compilación. Entonces puedes utilizar reflexión para comprobar la presencia de este atributo y generar un mensaje de advertencia o error si es necesario.

    Aquí tienes un ejemplo de código:

    [AttributeUsage(AttributeTargets.Method, Inherited = false)]
    [Conditional("COMPILE_TIME")]
    public sealed class NotYetImplementedAttribute : Attribute
    {
        public NotYetImplementedAttribute() {}
    }
    
    // Uso:
    public class MyClass
    {
        [NotYetImplemented]
        public void MyMethod()
        {
            // Implementar este método más tarde
        }
    }
    

    En este ejemplo, creamos un nuevo atributo denominado NotYetImplementedAttribute que se puede aplicar a métodos. También especificamos que sólo se debe ejecutar en tiempo de compilación.

    Luego puedes aplicar este atributo a cualquier método que aún no hayas implementado, y el compilador generará un mensaje de advertencia o error indicando que el método debe implementarse antes de poder ser llamado.

    Ten en cuenta que el atributo [Conditional("COMPILE_TIME")] asegura que NotYetImplementedAttribute sólo se ejecute durante la compilación y no afecte al rendimiento en tiempo de ejecución de tu aplicación.

Comments are closed.