如何扩展没有多重继承的te MembershipUser类?

时间:2009-09-11 17:28:42

标签: inheritance asp.net-membership

在顶级我有一个Person类。接下来我希望.NET的MembershipUser类继承它,因为成员是一个人。但是我想扩展MembershipUser类,这意味着,我想,我需要创建继承自MembershipUser的OWN MembershipUser类,然后添加我自己的属性。但是一旦我这样做,由于多重继承规则(ASP.NET 2.0),我不能再继承Person。

1 个答案:

答案 0 :(得分:1)

您可以通过创建一个接口IPerson并使用一个继承自Person并实现MembershipUser的类替换您的具体IPerson类来解决此问题。

您还可以保持具体Person,创建IPerson并让您自己的类封装Person实例,并在实施MembershipUser时继承IPerson

在任何一种情况下,您曾经使用过具体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; }
    }
}

或者你可以继续使用Person并让它封装一个MembershipUser实例(作为构造函数的一部分),并在需要时包含Person到MembershipUser的显式转换......

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

我会自己使用接口实现解决方案。