Me sorprendió descubrir que el constructor sin parámetros de mi clase base se llama cada vez que llamo al cualquier constructor en una clase derivada. Pensé que eso era para lo que : base()
era para, explícitamente llamar al constructor base si y cuando quisiera.¿Cómo puedo decirle a la clase heredada que no llame al constructor sin parámetros de su clase base?
¿Cómo puedo evitar que se llame al constructor base cuando instalo una clase derivada?
using System;
namespace TestConstru22323
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer("Jim", "Smith");
Customer c = new Customer();
Console.WriteLine(customer.Display());
Console.ReadLine();
}
}
public class Person
{
public Person()
{
Console.WriteLine("I don't always want this constructor to be called. I want to call it explicitly.");
}
}
public class Customer : Person
{
private string _firstName;
private string _lastName;
//public Customer(string firstName, string lastName): base() //this explicitly calls base empty constructor
public Customer(string firstName, string lastName) //but this calls it anyway, why?
{
_firstName = firstName;
_lastName = lastName;
}
public string Display()
{
return String.Format("{0}, {1}", _lastName, _firstName);
}
}
}
¿Cuál es la razón por la que no desea que se llame al constructor base? –
Por ejemplo, si todas las clases heredadas necesitan alguna inicialización común, entonces la pongo en el constructor base, pero si algunas de ellas * no * necesitan esta inicialización, entonces quiero poder tener las que lo necesitan * explícitamente * llama al constructor base. –
Si tiene una instancia en la que solo desea una parte de la funcionalidad de la clase base, probablemente necesite cambiar su jerarquía de herencia para dividir esos conjuntos de clases derivadas en dos ramas a partir de una base común más simple. –