Uso forzado del atributo en la subclase de la superclase abstracta

¿Cómo puedo obligar a una subclase a implementar ciertos Atributos de su superclase? La razón es que quiero usar los atributos para obtener información general sobre la clase, por ejemplo, “Nombre de pantalla”, “Descripción” o “Capacidades”.

Así que pensé que podría implementarlas en una superclase y forzar a las subclases a implementar los atributos.

¿Hay algo así como un atributo abstract como para los métodos?

 [abstract DeclareMe] public abstract class InheritMe { public abstract void DeclareMe(); } 

Como su clase debe ejecutarse tarde o temprano, puede agregar un mecanismo de verificación a su clase base para verificar la existencia de ciertos atributos en sus subclases.

Aquí hay un código de ejemplo para usted.

 class Program { static void Main(string[] args) { var a = new SubA(); var b = new SubB(); } } class BaseClass { public BaseClass() { Type t = GetType(); if (t.IsDefined(typeof(SerializableAttribute), false) == false) { Console.WriteLine("bad implementation"); throw new InvalidOperationException(); } Console.WriteLine("good implementation"); } } [Serializable] class SubA : BaseClass { } class SubB : BaseClass { } 

La última palabra, no seas demasiado cauteloso contigo mismo. Una vez que estaba haciendo mi diseño, siempre pensé que podría llamar dos métodos en un orden incorrecto u olvidarme de hacer algo, luego convertí un diseño simple en uno complicado para evitar mis posibles errores. Más tarde, deseché a los guardias, simplemente lanzando Excepciones y el código utilizado para detectar situaciones inesperadas estaba rodeado por #if DEBUG .

Además de las respuestas de ese otro hilo:

Podría usar FxCop e implementar una regla personalizada que verifique si sus atributos están presentes.