Inheritance 如何在没有多重继承的情况下扩展te MembershipUser类?
在最高级别,我有一个Person类。接下来,我希望.NET的MembershipUser类从中继承,因为成员是个人。但是我想扩展MembershipUser类,这意味着我需要创建自己的MembershipUser类,该类继承自MembershipUser,然后添加自己的属性。但是一旦我这样做了,由于多重继承规则(ASP.NET 2.0),我就不能再从Person继承了。你可以通过创建一个接口,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
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);
我将自己使用接口实现解决方案