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á A
constructor 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