Inheritance 如何在没有多重继承的情况下扩展te MembershipUser类?

Inheritance 如何在没有多重继承的情况下扩展te MembershipUser类?,inheritance,asp.net-membership,Inheritance,Asp.net Membership,在最高级别,我有一个Person类。接下来,我希望.NET的MembershipUser类从中继承,因为成员是个人。但是我想扩展MembershipUser类,这意味着我需要创建自己的MembershipUser类,该类继承自MembershipUser,然后添加自己的属性。但是一旦我这样做了,由于多重继承规则(ASP.NET 2.0),我就不能再从Person继承了。你可以通过创建一个接口,IPerson并用一个继承自MembershipUser并实现IPerson的类替换你的具体Person

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

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

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

无论是哪种情况,只要您曾经使用过具体的
Person
类型,就应该用
IPerson
替换(例如方法参数)

或者,您可以继续使用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);

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

您可以通过创建一个接口,
IPerson
并将具体的
Person
类替换为继承自
MembershipUser
并实现
IPerson
的类来解决这个问题

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

无论是哪种情况,只要您曾经使用过具体的
Person
类型,就应该用
IPerson
替换(例如方法参数)

或者,您可以继续使用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);
我将自己使用接口实现解决方案