2 votes

Comment utiliser les propriétés d'une classe dans la même classe comme si elles avaient des valeurs en C#

J'essaie d'utiliser une propriété d'une classe de la même classe pour la comparer à une autre valeur. Cependant, cette propriété est toujours vide car je n'ai pas d'instance de cette classe. Voir l'exemple ci-dessous.

public Zoo(string name, int capacity)
{
    Name = name;
    Capacity = capacity;    
}
public Zoo()
{
    AnimalsWhichCouldNotBeModified = new List<Animal>();
}
public List<Animal> AnimalsWhichCouldNotBeModified { get; set; }
public string  Name { get; set; }
public int Capacity { get; set; }

public string  AddAnimal(Animal animal)
{
    // Here I have tried to use the property Capacity.
    // I have also tried to use "capacity" from the constructor.
    // I have also tried to create an instance of the Zoo class in the Zoo class, but it is still empty, so I am not sure if I can do that.  
    if (Capacity < AnimalsWhichCouldNotBeModified.Count)
    {
        return "The zoo is full.";
    }

Comment puis-je obtenir la capacité (qui n'est toujours pas instanciée et qui est nulle) à utiliser dans l'exemple afin que je puisse vérifier si les animaux sont plus que la capacité du zoo ?

0voto

Mario Mateas Points 21

Dans votre deuxième constructeur ( public Zoo() qui ne nécessite pas d'autres paramètres), vous pourriez simplement définir votre Capacity = 0 .

Chaque fois qu'une instance est créée, vous allez soit utiliser le premier constructeur, où vous devez manuellement fournir un Capacity ou le deuxième constructeur qui va automatiquement définir le paramètre Capacity à la valeur 0 .

public Zoo(string name, int capacity)
{
    Name = name;
    Capacity = capacity;    
}
public Zoo()
{
    Capacity = 0;
    AnimalsWhichCouldNotBeModified = new List<Animal>();
}
public List<Animal> AnimalsWhichCouldNotBeModified { get; set; }
public string  Name { get; set; }
public int Capacity { get; set; }
public string  AddAnimal(Animal animal)
{
    // Here I have tried to use the property Capacity.
    // I have also tried to use "capacity" from the constructor.
    // I have also tried to create an instance of the Zoo class in the Zoo class, but it is still empty, so I am not sure if I can do that.  
    if (Capacity < AnimalsWhichCouldNotBeModified.Count)
    {
        return "The zoo is full.";
    }
}

0voto

Ondrej Tucny Points 13127

Le problème est que tu n'initialises pas AnimalsWhichCouldNotBeModified dans le constructeur non par défaut. Vous pouvez soit ajouter l'initialisation dans le constructeur par défaut :

public Zoo(string name, int capacity)
{
    Name = name;
    Capacity = capacity;    
    AnimalsWhichCouldNotBeModified = new List<Animal>();
}

ou appeler celui par défaut à partir de celui qui ne l'est pas :

public Zoo(string name, int capacity) : this()
{
    Name = name;
    Capacity = capacity;    
}

public Zoo()
{
    AnimalsWhichCouldNotBeModified = new List<Animal>();
}

ou, troisième option, fournir un initialisateur dans la déclaration de la propriété :

public List<Animal> AnimalsWhichCouldNotBeModified { get; set; } = new List<Animal>();

Je préférerais personnellement cette troisième option, à moins que je n'aie besoin d'un code d'initialisation plus complexe dans le constructeur.

Notez que lorsque Capacity n'est pas initialisé, il sera égal à 0 par défaut. Ceci est dû au fait que le champ de sauvegarde sous-jacent (généré par le compilateur) est initialisé à 0. Il en va de même pour AnimalsWhichCouldNotBeModified y Name qui sont null par défaut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X