Saltar al contenido

Clase abstracta con constructor, fuerza la clase heredada para llamarlo

Este team especializado despúes de muchos días de trabajo y recopilar de información, obtuvimos la solución, queremos que todo este artículo sea de gran utilidad para tu plan.

Solución:

Una clase sin un constructor explícito tiene un constructor sin parámetros. Por otro lado, si implementas un constructor con parámetros y sin constructor sin parámetros, su clase no será instanciable sin argumentos.

En otras palabras:

public abstract class A 

    public A(string x) 
    
    


public class B : A 

    // If you don't add ": base(x)" 
    // your code won't compile, because A has a 
    // constructor with parameters!
    public B(string x) : base(x)
    
    

es decir, si A tiene un constructor sin parámetros (o ningún constructor explícito), B llamará automáticamente al constructor base. No necesita codificar más cosas aquí.

De lo contrario, si su clase base tiene un constructor sin parámetros y un constructor con parámetros, no puede obligar a una clase derivada a llamar automáticamente a un constructor, excepto al predeterminado. (es decir, el llamado constructor sin parámetros).

Solución alterna

Bueno, no hay una solución especial aquí, pero tenga en cuenta que C# admite parámetros opcionales tanto en constructores como en métodos.

Si quiere estar 100% seguro de que las clases derivadas llamarán a un constructor base concreto, puede implementar su clase base usando un solo constructor sin parámetros con parámetros opcionales y usar esto en lugar de sobrecargar el constructor:

public class A

    public A(string x = "hello world") // or just string x = null
    

    

ahora si un B clase derivada A, B siempre llamará Aconstructor base de , ya que x es opcional y tiene un valor predeterminado.

Cómo forzar a la clase heredada a llamar base(string name)

Haga que el constructor sin parámetros en su clase abstracta sea privado, o no lo agregue en absoluto. Eso obligará a todas las clases derivadas a llamar al constructor que especificó o habrá un error de compilación.

public abstract class BaseClass

    protected BaseClass(string parameter)
    
    


public class DerivedClass : BaseClass

    public DerivedClass()
    
    

terminará con

'`Project.BaseClass`' does not contain a constructor that takes 0 arguments

valoraciones y comentarios

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


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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