Créer de la classe héritée de la classe de base
public class Car
{
private string make;
private string model;
public Car(string make, string model)
{
this.make = make;
this.model = model;
}
public virtual void Display()
{
Console.WriteLine("Make: {0}", make);
Console.WriteLine("Model: {0}", model);
}
public string Make
{
get{return make;}
set{make = value;}
}
public string Model
{
get{return model;}
set{model = value;}
}
}
public class SuperCar:Car
{
private Car car;
private int horsePower;
public SuperCar(Car car)
{
this.car = car;
}
public int HorsePower
{
get{return horsePower;}
set{horsepower = value;}
}
public override void Display()
{
base.Display();
Console.WriteLine("I am a super car");
}
Quand je fais quelque chose comme
Car myCar = new Car("Porsche", "911");
SuperCar mySupcar = new SuperCar(myCar);
mySupcar.Display();
Je ne reçois que "je suis une supercar", mais pas les propriétés de ma classe de base. Dois-je affecter explicitement les propriétés de ma classe de base dans la SuperCar du constructeur? En fait, je suis en train Décorateur modèle où je veux qu'une classe pour ajouter un comportement à une classe de base.
Pour Supercar être un vrai décorateur, déléguer l'ensemble de la Voiture de méthodes pour votre enveloppé voiture. On peut se demander si Décorateur est le bon modèle ici, d'autant que vous traitez avec des classes concrètes.
Supposons que vous renommez Voiture de Conteneur et de la SuperCar de la Boîte. Vous dites "une Boîte est Une sorte de Récipient (car il hérite de Conteneur) et chaque Boîte contient un Conteneur (parce qu'il faut un conteneur dans son constructeur et l'enregistre dans un champ)". Est-ce réellement ce que vous voulez de modèle? Pourquoi une boîte contient un conteneur? Pourquoi une SuperCar contiennent tous les deux une Voiture et d'être un genre de Voiture?
Supposons que vous renommez Voiture de Conteneur et de la SuperCar de la Boîte. Vous dites "une Boîte est Une sorte de Récipient (car il hérite de Conteneur) et chaque Boîte contient un Conteneur (parce qu'il faut un conteneur dans son constructeur et l'enregistre dans un champ)". Est-ce réellement ce que vous voulez de modèle? Pourquoi une boîte contient un conteneur? Pourquoi une SuperCar contiennent tous les deux une Voiture et d'être un genre de Voiture?
OriginalL'auteur Raj | 2010-05-20
Vous devez vous connecter pour publier un commentaire.
sinon:
De cette façon, vous pouvez hériter de toute la classe de voiture, et la voiture contenu remplir à partir de la condition d'objet. Les objets hérités n'avez pas besoin de savoir quelque chose au sujet de ce jeu. Qu'ils viennent passer la Voiture actuelle de l'objet à la classe de base et il fait le travail.
OriginalL'auteur kemiller2002
Je suis peut-être à venir dans un peu de retard ici, mais juste au cas où quelqu'un trouve cela utile:
Vous pouvez utiliser la réflexion. Elle nécessite un peu plus de code que ce que vous avez proposé, mais je pense qu'il offre toujours la brièveté vous êtes à la recherche pour.
J'ai écrit cette explicitement à partir de votre exemple pour illustrer clairement le concept, mais je pense que ce serait mieux fait d'une méthode générique qui peut être utilisé dans tous les cas similaires de votre solution.
Espère que cette aide.
OriginalL'auteur Josh Wheelock
En regardant ton code je ne suis pas sûr de savoir comment il compile. Votre constructeur sont mauvais parce que le constructeur de base ne savez pas comment faire pour exécuter un constructeur qui prend type de voiture. Il semble que vous essayez de mettre en oeuvre le décorateur motif, mais n'ont pas fait correctement. Vraiment ce que vous devez avoir est un
ICar
interface à la fois de mettre en œuvre et deDisplay()
dansSuperCar
vous devriez appelercar.Display()
Vous aurez également à mettre en œuvre sur Super voiture et les faire revenir la voiture.Faire & voiture.De modèle pour mettre en oeuvre le décorateur modèle correctement.C'est une question si vous voulez utiliser le décorateur modèle ou non. Vraiment on dirait que vous ne voulez pas que le pattern décorateur parce que vous voulez juste pour développer la voiture (qui est ce que l'héritage est pour) et pas de l'emballer et de changer la façon dont il fonctionne, dans ce cas de Kevin est la bonne solution.
OriginalL'auteur Craig Suchanec
Modifier les propriétés privées des biens protégés, privés ne sont pas accessibles par quiconque à l'exception de la classe qui crée entre eux, tout en étant protégé des variables peut être consulté par les classes héritées.
OriginalL'auteur jpabluz
yep pour obtenir que cela fonctionne comme vous le souhaitez, vous devez définir le constructeur de base comme ci-dessous:
OriginalL'auteur Somedeveloper
Vous n'êtes pas assez mise en œuvre de la décorateur modèle
Vous avez besoin d'une classe de base abstraite pour tenir la décorées voiture
Non, vous auriez besoin d'une liste de CarDecorators à la place.
OriginalL'auteur Daniel
@JoshWheelock réponse, j'ai écrit cette méthode que j'ai mis dans un fichier partagé de mon Xamarin projet
Elle clones de classes, de sorte que vous pouvez utiliser pour dupliquer une base de classe, l'héritière, vous pouvez ajuster la T param
Pas encore testé sur Android et iOS, concernant Android, j'ai mon émulateur qui soddenly cessé de fonctionner correctement depuis une semaine ...
OriginalL'auteur Fabrice T