Saltar al contenido

El diseñador debe crear una instancia de… no puede porque el tipo se declara abstracto

Ten en cuenta que en las ciencias un problema casi siempre tiene varias resoluciones, no obstante nosotros aquí te enseñamos la mejor y más óptimo.

Solución:

No he visto el contenido en urban potato (está abajo), pero a mí y a Smelch se nos ocurrió una solución. Form hereda de una clase abstracta, por lo que lo que no te dicen es que es solo el primer nivel de herencia que no puede ser abstracto, el segundo hacia abajo puede.

A partir de ahí, es simplemente una cuestión de tener una clase vacía en el medio y envolver una #if debug alrededor de la declaración de formularios y listo. Solo asegúrese de lanzar en modo de lanzamiento y diseñar en modo de depuración (que es muy típico).

Obtendrá soporte completo del diseñador y una clase base abstracta real en el momento del diseño (depuración) y compilación (lanzamiento) porque cada vez que termina usando su clase base abstracta.

La explicación completa y la respuesta está aquí.

Puedes resolver esto usando un attribute en su clase abstracta como la siguiente

[TypeDescriptionProvider(typeof(AbstractControlDescriptionProvider))]

Esto funcionará para todos los casos en los que lo necesite. El AbstractControlDescriptionProvider está debajo

public class AbstractControlDescriptionProvider : TypeDescriptionProvider

    public AbstractControlDescriptionProvider()
        : base(TypeDescriptor.GetProvider(typeof(TAbstract)))
    
    

    public override Type GetReflectionType(Type objectType, object instance)
    
        if (objectType == typeof(TAbstract))
            return typeof(TBase);

        return base.GetReflectionType(objectType, instance);
    

    public override object CreateInstance(IServiceProvider provider, Type objectType, Type[] argTypes, object[] args)
    
        if (objectType == typeof(TAbstract))
            objectType = typeof(TBase);

        return base.CreateInstance(provider, objectType, argTypes, args);
    

valoraciones y reseñas

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *