Au niveau supérieur, j'ai une classe Person. Ensuite, je veux que la classe MembershipUser de .NET en hérite, car un membre est une personne. Cependant, je veux étendre la classe MembershipUser ce qui signifie, je pense, que je dois créer ma classe OWN MembershipUser qui hérite de MembershipUser et ajoute ensuite mes propres propriétés. Mais une fois que je fais cela, je ne peux plus hériter de la Personne en raison de règles d'héritage multiples (ASP.NET 2.0).Comment puis-je étendre la classe MembershipUser sans héritage multiple?
Répondre
Vous pouvez résoudre ce problème en créant une interface, IPerson
et le remplacement de votre classe Person
en béton avec une classe qui hérite de MembershipUser
et met en œuvre IPerson
.
Vous pouvez également garder votre béton Person
, créer IPerson
et avoir votre propre classe encapsule une instance Person
et hérite de MembershipUser
en mettant en œuvre IPerson
.
Dans les deux cas, partout où vous avez déjà utilisé un type concret Person
, vous devez remplacer par IPerson
(comme les arguments de méthode).
interface IPerson
{
string LastName { get; set; }
// ...
}
class MyMembershipUser : MembershipUser, IPerson
{
private Person _person = new Person();
// constructors, etc.
public string LastName
{
get { return _person.LastName; }
set { _person.LastName = value; }
}
}
Sinon, vous pouvez continuer à utiliser personne et l'encapsule une instance MembershipUser (dans le cadre d'un constructeur) et comprend un casting explicite pour personne à MembershipUser en cas de besoin ...
class Person
{
private readonly MembershipUser _mu;
public Person(MembershipUser mu)
{
_mu = mu;
}
public static explicit operator MembershipUser(Person p)
{
// todo null check
return p._mu;
}
}
// example
var person = new Person(Membership.GetUser("user"));
Membership.UpdateUser((MembershipUser)person);
Je voudrais aller avec la solution d'implémentation d'interface moi-même.
- 1. Héritage d'interface multiple sans utiliser d'interface
- 2. Comment étendez-vous la classe MembershipUser?
- 3. Comment étendre la classe java.security.SecureClassLoader?
- 4. Héritage multiple de deux classes dérivées
- 5. Comment étendre la classe IconNodeWidget en Java?
- 6. Comment pouvez-vous étendre la classe Bitmap
- 7. Héritage multiple et saisie de canard
- 8. étendre une classe de base abstraite sans recompilation de source?
- 9. Héritage d'une classe de base
- 10. Héritage virtuel multiple C++ par rapport à COM
- 11. Newbie php classe héritage question
- 12. php5 étendre la classe principale et utiliser la statique
- 13. Set héritage de classe après Si une classe a été définie delcaration de classe ou un paramètre héritage de classe de la classe de const_set
- 14. Comment résoudre "Doit être MarshalByRefObject" dans un langage amputé bon mais à héritage multiple comme C#?
- 15. Héritage visuel dans ASP.NET sans pages maîtres
- 16. Héritage - Tableaux de la classe parente et tableaux de la classe enfant - diffusion
- 17. Implémentation de MembershipUser personnalisé
- 18. Héritage d'une sous-classe abstraite UserControl
- 19. Comment étendre une classe avec les méthodes d'extension C#?
- 20. Classe org.springframework.web.jsf.el.SpringBeanFacesELResolver doit étendre le type javax.el.ELResolver
- 21. C# et C++ héritage de classe entremêlement
- 22. Comment concevez-vous l'arbre/hiérarchie de contrôle sans héritage?
- 23. Comment - sans héritage - remplacer une méthode de classe et appeler l'original à partir de la nouvelle méthode?
- 24. SÉLECTIONNER un élément dans le style d'affichage à sélection multiple sans permettre la sélection multiple
- 25. Obtenir MembershipUser dans ASP.NET MVC
- 26. Héritage classe class, comment faire de ce code maintenable
- 27. Héritage de classe avec Hibernate et hbm2java
- 28. Comment étendre et modifier PyUnit
- 29. Héritage multiple en C++ entraînant des difficultés à surcharger les fonctionnalités communes
- 30. Comment faire pour étendre Array.prototype.push()?