Je suis nouveau en C #, et je voulais savoir que si je crée une instance d'une classe enfant, est-ce que cela crée également automatiquement une instance de la classe parent ou quoi?

Voici mon code:

class Program
{

    public class ParentClass
    {
        public ParentClass()
        {
            Console.WriteLine("ChildClass uses my Ctor ");
        }

    }

    public class ChildClass : ParentClass
    {
        public ChildClass()
        {
            Console.WriteLine("SaySomething");
        }
    }

    public static void Main()
    {
        ChildClass child = new ChildClass();
    }
}
28
brk 20 nov. 2018 à 18:01

7 réponses

Meilleure réponse

Non, mais il appelle le constructeur de base (le constructeur de la classe parent). Ce qui dans votre cas est vide, donc l'appel au constructeur de classe de base est effectué pour vous par le compilateur:

class Program
{
    public class ParentClass
    {
        public ParentClass()
        {
            Console.WriteLine("ChildClass drived from me ");
        }

    }

    public class ChildClass : ParentClass
    {
        public ChildClass() : base() // base() call is voluntary
        {
            Console.WriteLine("This also use my Ctor");
        }
    }

    public static void Main()
    {
        ChildClass child = new ChildClass();
    }
}

Cependant, si votre classe de base n'avait pas de constructeur sans paramètre, vous devrez l'appeler

class Program
{
    public class ParentClass
    {
        public ParentClass(string foo)
        {
            Console.WriteLine("ChildClass drived from me ");
        }

    }

    public class ChildClass : ParentClass
    {
        public ChildClass() : base("some foo") // base call is obligatory
        {
            Console.WriteLine("This also use my Ctor");
        }
    }

    public static void Main()
    {
        ChildClass child = new ChildClass();
    }
}

Par définition, lorsque ChildClass hérite du formulaire ParentClass, alors les objets ChildClass appartiennent également au ParentClass.

Si votre nom était davantage orienté vers la vie réelle, ce serait plus facile à comprendre.

class Animal {}
class Cat : Animal {}

var rocky = new Cat();

Vous voyez, Rocky est un chat, mais c'est aussi un animal.

10
Andrzej Gis 21 nov. 2018 à 12:52

La vraie réponse à votre question est

«Non», c'est une instance de la classe Child, pas du Parent.

Mais si votre question est: "Aurez-vous un objet-instance contenant toutes les propriétés de la classe Parent", la réponse est

«Oui», vous aurez toutes les propriétés et tous les champs de la classe Parent copiés dans l'instance Child.

8
Mayer Spitzer 20 nov. 2018 à 15:11

Une autre façon de considérer une classe est simplement un modèle pour les objets. c'est-à-dire que les instances d'objet créées à partir de cette classe doivent avoir cette logique d'implémentation. Créer une instance d'une classe, prend toute cette logique et la convertit en comportement pour l'objet. Lorsque vous héritez d'une classe, vous incluez essentiellement la logique d'implémentation de la classe parente dans le modèle de la classe enfant, vous obtenez donc simplement un «modèle» étendu. Lorsque vous créez une instance d'objet à partir de ce modèle, l'instance utilise le modèle enfant, qui contient une combinaison de la logique définie dans les classes parent et enfant.

Instanciation normale: logique de classe -> modèle -> instance

Héritage: logique de classe parent + logique de classe enfant -> modèle -> instance

2
Jamiel Thomas 4 déc. 2018 à 11:44

Disons que vous avez la classe parent Coffee et la classe enfant Cappucino

class Coffee {}

class Cappucino : Coffee {}

En émettant new Cappucino(), une instance est créée pour Cappucino. Le Cappucino est en fait du café et les propriétés du café sont héritées du Cappucino.

Aucune instance distincte n'est créée pour Coffee.

Cappucino porte les caractéristiques du café par héritage

1
Derviş Kayımbaşıoğlu 10 déc. 2018 à 13:10

C'est comme ça ... vous avez créé une instance de ParentClass mais vous pouvez également la convertir en ChildClass. C'est une instance ParentClass.

0
Hrvoje Batrnek 21 nov. 2019 à 16:45

Non, cela ne créera qu'une instance de la classe enfant.

1
Sr.Mento 20 nov. 2018 à 15:05

crée-t-il également automatiquement une instance de la classe Parent?

Pas une instance distincte ; l'instance ChildClass est une ParentClass, quand on parle d'héritage.

En mots, c'est comme:

lors de la création d'un chien, créons-nous également une instance d'un animal?

Nous ne créons pas un chien et (séparément) créons un animal; le chien est l'instance animale. Et si nous créons un caniche, le caniche est le chien et est l'animal.

66
Marc Gravell 20 nov. 2018 à 15:03