Actualmente estoy trabajando en una herramienta que necesita crear algún tipo de .NET personalizado con algunos campos adicionales. Me he estado preguntando qué enfoque es mejor para resolver esto, y pensando en el estado las siguientes opciones:Funcionalidad en expansión para .NET Controls
Opción A: - Crear una clase derivada para cada control (digamos, CLABEL, CGroupBox ...) donde defino los nuevos campos en cada clase. Esto significaría peor capacidad de mantenimiento pero sería fácil de operar con.
Ejemplo:
class CLabel: Label
{
public List<Control> RelatedControls {get; set;}
public String textHint;
// more stuff...
public CLabel()
{}
}
Opción B: - Esta opción significaría no crear una clase derivada de cada control, pero utilizando la etiqueta real, GroupBox, etc controles y la creación de una clase que encapsula todo el propiedades "extra". Se hará referencia a este objeto de propiedades adicionales en la propiedad Control.Tag
. Tengo dudas sobre esto porque hacer referencia a un tipo de objeto complejo dentro de la propiedad Tag
me parece un poco malo, pero esto significaría una mejor capacidad de mantenimiento y también, por supuesto, no es necesario crear controles de subclases.
Ejemplo:
Label lbl = new Label();
lbl.Tag = new ControlDescription();
Opción C: - Esto significaría tener algún tipo de combinación de la Opción A y B. Sólo la creación el control personalizado, por ejemplo CLABEL, que añade un campo ControlDescription tipo al control de etiqueta. De esta manera aseguramos la encapsulación y la capacidad de mantenimiento, pero evitamos la cosa Tag
.
Estoy bastante seguro de que hay muchas opciones mejores que esas. Probablemente solo use polimorfismo, un concepto con el que aún tengo problemas, las clases de control personalizadas podrían retirarse. ¿Cuál de esas opciones crees que es la mejor? ¿Crees que todo esto podría hacerse mejor?
Gracias, voy a echar un vistazo a esto, también. –