C# héritage

Résolu
gilles81 Messages postés 72 Statut Membre -  
gilles81 Messages postés 72 Statut Membre -
Bonjour,
j'ai implémenté ceci :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Rayan2
{
class Publication
{
private String title;
private int sale;
private float price;
private int participation;
public String Title
{
get
{
return title;
}
set
{

title = value;
}
}
public int Sale
{
get
{
return sale;
}
set
{

sale = value;
}
}
public float Price
{
get
{
return price;
}
set
{

price = value;

}
}
public int Participation
{
get
{
return participation;
}
set
{
participation = sale * price;
Console.WriteLine("price als float: {0}, price als int: {1}", price, (int)price);

}
}
public override string ToString()
{

return String.Format("{0}\n----------------------\nTitel : {1}\nVerkaufszahlen : {2}\nPreis pro Stück ($) : {3}\nBeteiligungssatz : {4} %", title, sale, price, participation);

}
public virtual float CalculateFee()
{
float calculatefee = (float)(sale * (int)price / 100 * participation);
return calculatefee;

}

}
class Book : Publication
{
private int pages;
public int Pages
{
get
{
return pages;
}
set
{

pages = value;
}
}
public override string ToString()
{
return String.Format("{0}\n----------------------\nTitel : {1}\nVerkaufszahlen : {2}\nPreis pro Stück ($) : {3}\nBeteiligungssatz : {4} %\nPages : {5}", title, sale, price, participation,pages);
}

}
abstract class DigitalMediaj : Publication
{
private const float literalPropertyFee = 10000;
private int runTime;

public DigitalMediaj(int runTime)
{
this.runTime = runTime;
}
public float LiteralPropertyFee
{
get
{
return LiteralPropertyFee;
}
}
private int RuntimeMedium{
get
{
return runTime ;
}
set
{
runTime = value ;
}

}
public override float CalculateFee()
{
float calculatefee = (float)((sale * (int)price / 100 * participation)+(int) LiteralPropertyFee);
return calculatefee;

}
}
class Audio : DigitalMediaj
{

}
public class Movie : DigitalMediaj
{
private float movieRights;
public float MovieRights
{
get
{
return MovieRights;
}
set
{
MovieRights = value;
}
}
public override float CalculateFee()
{
float calculatefee = (float)(((sale * (int)price / 100 * participation) + (int)LiteralPropertyFee)+(int)MovieRights);
return calculatefee;

}
public override string ToString()
{
return String.Format("{0}{1}{2}{3}{4}{5}{6}", title, sale, price, participation, LiteralPropertyFee,MovieRights);
}
}
}

En fait je dois implémenter la méhode CalculateFee() qu'une seule fois , c'est à dire dans la classe Publication dont hérite la class Book et la classe DigitalMediaj. Les classes Audio et Movie heritent de la classe DigitalMediaj. Comment devrais-je utiliser la méthode CalculateFee() dans les autres classes sans la dupliquer.

En plus il ya une erreur de compilation qui persiste: Inconsistent accessibility: base class 'Rayan2.DigitalMediaj' is less accessible than class 'Rayan2.Movie'

merci
Configuration: Windows Vista
Firefox 3.0.5

2 réponses

  1. scriptiz Messages postés 1494 Statut Membre 425
     
    Bon voilà j'ai apporter quelques modifications :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Rayan2
    {
        class Publication
        {
            private String _title;
            private int _sale;
            private float _price;
            private int _participation;
    
            public String Title
            {
                get { return _title; }
                set { _title = value; }
            }
    
            public int Sale
            {
                get { return _sale; }
                set { _sale = value; }
            }
    
            public float Price
            {
                get { return _price; }
                set { _price = value; }
            }
    
            public int Participation
            {
                get { return _participation; }
                set
                {
                    _participation = (int)(_sale * _price);
                    Console.WriteLine("price als float: {0}, price als int: {1}", price, (int)price);
                }
            }
    
            public override string ToString()
            {
    
                return String.Format("{0}\n----------------------\nTitel : {1}\nVerkaufszahlen : {2}\nPreis pro Stück ($) : {3}\nBeteiligungssatz : {4} %", Title, Sale, Price, Participation);
    
            }
    
            public virtual float CalculateFee()
            {
                float calculatefee = (float)(Sale * (int)Price / 100 * Participation);
                return calculatefee;
            }
        }
    
        class Book : Publication
        {
            private int _pages;
    
            public int Pages
            {
                get { return _pages; }
                set { _pages = value; }
            }
    
            public override string ToString()
            {
                return String.Format("{0}\n----------------------\nTitel : {1}\nVerkaufszahlen : {2}\nPreis pro Stück ($) : {3}\nBeteiligungssatz : {4} %\nPages : {5}", base.Title, base.Sale, base.Price, base.Participation, Pages);
            }
        }
    
        abstract class DigitalMediaj : Publication
        {
            private const float _literalPropertyFee = 10000;
            private int _runTime;
    
            public DigitalMediaj(int runTime)
            {
                this._runTime = runTime;
            }
    
            public float LiteralPropertyFee
            {
                get { return _literalPropertyFee; }
            }
    
            private int RuntimeMedium
            {
                get { return _runTime; }
                set { _runTime = value; }
            }
    
            public override float CalculateFee()
            {
                return (base.CalculateFee() + (int)LiteralPropertyFee);
            }
        }
    
        class Audio : DigitalMediaj
        {
    
        }
    
        public class Movie : DigitalMediaj
        {
            private float _movieRights;
    
            public float MovieRights
            {
                get { return _movieRights; }
                set { _movieRights = value; }
            }
    
            public override float CalculateFee()
            {
                return (base.CalculateFee() + (int)MovieRights);
            }
    
            public override string ToString()
            {
                return base.ToString() + String.Format("{0}{1}", base.LiteralPropertyFee, MovieRights); 
            }
        }
    }


    Sinon je te conseille de remplacer ceci :
            public int Participation
            {
                get { return _participation; }
                set
                {
                    _participation = (int)(_sale * _price);
                    Console.WriteLine("price als float: {0}, price als int: {1}", price, (int)price);
                }
            }


    Par ceci (étant donné que tu ne modifie jamais la valeur de la participation avec value.
            public int Participation
            {
                get { return (int)(Sale * Price); }
            }


    Tu peux y rajouter ton affichage console et ainsi supprimer le _participation, comme ça tu aura toujours la valeur de Sale * Price quand tu demandera Participation.
    0
  2. gilles81 Messages postés 72 Statut Membre 1
     
    merci
    0