Saltar al contenido

Constructor de una clase abstracta en C#

Luego de consultar especialistas en el tema, programadores de deferentes ramas y profesores dimos con la respuesta al problema y la compartimos en este post.

Solución:

Porque puede haber una forma estándar en la que desee crear instancias de datos en la clase abstracta. De esa manera, puede hacer que las clases que heredan de esa clase llamen al constructor base.

public abstract class A

    private string data;

    protected A(string myString)
      data = myString;
    



public class B : A 

     B(string myString) : base(myString)


Que yo sepa, no podemos instanciar una clase abstracta

Ahí está tu error. Por supuesto, puede instanciar una clase abstracta.

abstract class Animal 
class Giraffe : Animal 
...
Animal animal = new Giraffe();

Hay una instancia de Animal justo ahí. Instancia una clase abstracta creando una clase concreta derivada de ella e instanciando eso. Recuerde, una instancia de una clase concreta derivada es además una instancia de su clase base abstracta. Una instancia de Jirafa es también una instancia de Animal incluso si Animal es abstracto.

Dado que puede instanciar una clase abstracta, debe tener un constructor como cualquier otra clase, para garantizar que se cumplan sus invariantes.

Ahora, un static class es una clase que en realidad no puede instanciar, y notará que no es legal hacer un constructor de instancias en un static clase.

Es una forma de hacer cumplir un conjunto de invariantes de la clase abstracta. Es decir, sin importar lo que haga la subclase, querrá asegurarse de que algunas cosas siempre estén true de la clase base… ejemplo:

abstract class Foo

    public DateTime TimeCreated get; private set;

    protected Foo()
    
         this.TimeCreated = DateTime.Now;
    


abstract class Bar : Foo

    public Bar() : base() //Bar's constructor's must call Foo's parameterless constructor.
     

No piense en un constructor como el dual del new operador. El único propósito del constructor es asegurarse de que tiene un objeto en un estado válido antes de comenzar a usarlo. Sucede que nosotros normalmente llámalo a través de un new operador.

Te mostramos comentarios y calificaciones

Si piensas que ha sido útil este artículo, agradeceríamos que lo compartas con el resto programadores de este modo nos ayudas a dar difusión a esta información.

¡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 *