Rechercher : dans
Par :

C# héritage

Dernière réponse le 26 déc 2008 à 12:26:53 gilles81, le 26 déc 2008 à 08:05:59 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « c# héritage » dans :
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Héritage virtuel VoirHéritage virtuel Code 7.9 : héritage virtuel #include using namespace std; class Creature { public: Creature():age(3) { cout
Héritage et polymorphisme VoirHéritage et polymorphisme La notion d’héritagexe "héritage" est très facile à comprendre. En C++, on dit qu’une classe définie à partir d’une classe existante et à laquelle on ajoute une fonctionnalité dérive de la classe initiale. Cette dernière...
Java - L'héritage VoirLa notion d'héritage Le concept d'héritage est un des concepts les plus importants de la programmation orientée objet, car il conditionne irréversiblement la façon selon laquelle un code Java est écrit. L'héritage est un mécanisme permettant de...

1

scriptiz, le 26 déc 2008 à 12:23:23

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.

Répondre à scriptiz

2

 gilles81, le 26 déc 2008 à 12:26:53

Merci

Répondre à gilles81