2009-09-11 3 views
1

최상위 레벨에는 Person 클래스가 있습니다. 다음으로, 회원이 사람이기 때문에 .NET의 MembershipUser 클래스에서 상속 받길 원합니다. 그러나 MembershipUser 클래스를 확장하여 MembershipUser에서 상속받은 내 OWN MembershipUser 클래스를 만들고 자신의 속성을 추가해야한다고 생각합니다. 하지만 일단 그렇게하면 다중 상속 규칙 (ASP.NET 2.0)으로 인해 Person에서 더 이상 상속받을 수 없습니다.다중 상속없이 te 회원 사용자 클래스를 확장하는 방법은 무엇입니까?

답변

1

당신은, IPerson을 인터페이스를 생성하고 MembershipUser에서 상속 및 IPerson를 구현하는 클래스와 콘크리트 Person 클래스를 대체하여이 문제를 해결할 수 있습니다.

당신은 또한 당신의 콘크리트 Person을 유지 IPerson을 작성하고 자신의 클래스가 Person 인스턴스를 캡슐화하고 IPerson을 구현하면서 MembershipUser에서 상속있을 수 있습니다.

어느 경우 든 한 번 구체 Person 유형을 사용했던 곳에서는 IPerson (메소드 인수 등)으로 대체해야합니다. 또한

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; } 
    } 
} 

...

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); 

을 사람을 계속 사용하고 (생성자의 일부로서)는 MembershipUser 인스턴스를 캡슐화하고 필요 MembershipUser에 사람에 대한 명시 적 캐스트가 포함이 그럴 수 나는 것 직접 인터페이스 구현 솔루션을 사용하십시오.

관련 문제