2009-09-11 12 views
1

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

1

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.

Questions connexes