在顶级我有一个Person类。接下来我希望.NET的MembershipUser类继承它,因为成员是一个人。但是我想扩展MembershipUser类,这意味着,我想,我需要创建继承自MembershipUser的OWN MembershipUser类,然后添加我自己的属性。但是一旦我这样做,由于多重继承规则(ASP.NET 2.0),我不能再继承Person。
答案 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);
我会自己使用接口实现解决方案。