2016-03-16 1 views
-3

est ici une partie de mon code:C défaut # constructeur

class Tiger: Animal,IPredator 
{ 
private double weight; 
public static double AvgWeight; 
public static int Population; 
public static double TotalWeight; 
public Tiger(double aWeight):this(aWeight,"Savannah"){} 
public Tiger(double aWeight, params string[] aHabitat) : base(aWeight,"Panthera Tigris", "Mammalia", aHabitat) 
{ 
    Population++; 
    TotalWeight += Weight; 
    AvgWeight = TotalWeight/Population; 
    Console.WriteLine($"Let's all welcome our new Tiger: {Weight} kilos. Average pride weight: {AvgWeight}"); 
} 
public override double Weight 
{ 
    get 
    { 
     return weight; 
    } 

    set 
    { 
     TotalWeight -= weight; 
     weight = value; 
     TotalWeight += weight; 
     AvgWeight = TotalWeight/Population; 
    } 
} 

a l'air bien, mais quand je crée une instance et vérifier le constructeur, il double la valeur du poids du nouveau chat.

partie du code de l'animal:

abstract class Animal 
    { 
    private string kind; 
    private string @class; 
    public List<string> Habitat = new List<string>(); 
    public virtual double Weight { get; set; } 
    public string Kind { get { return kind; } set { } } 
    public string @Class { get { return kind; } set { Console.WriteLine("Class cannot be changed"); } } 

    public Animal(double aWeight,string aKind, string aClass,params string[] aHabitat) 
    { 
     kind = aKind; 
     @class = aClass; 
     Habitat.AddRange(aHabitat); 
     Weight = aWeight; 
    } 

je tentais d'éviter ces problèmes, c'est pourquoi j'ai ajouté un champ double supplémentaire dans Tiger. Mais j'ai besoin que le Tiger fonctionne comme ça et les animaux devraient avoir une propriété Weight.

+5

Vous ne devriez vraiment pas suivre ce genre de choses dans des variables statiques –

+3

Il est impossible pour quiconque de répondre à cette question sans voir à quoi ressemblent les constructeurs d'Animal. – Tom

+0

Code animal ajouté –

Répondre

0

Ok, le problème n'était pas l'héritage ou les méthodes statiques. C'était juste la même chaîne dans le setter et le constructeur: TotalWeight + = value;