我正在使用具有“成员”类的API。我希望扩展这个,所以我创建了“MemberProfile”,它继承自“Member”C#继承问题
我有一些问题为这个类创建构造函数。我希望如下所示
var member = Member.GetCurrentMember();
var memberProfile = new MemberProfile(member);
MemberProfile上的构造函数将如何显示。我需要做一些演员吗?
我正在使用具有“成员”类的API。我希望扩展这个,所以我创建了“MemberProfile”,它继承自“Member”C#继承问题
我有一些问题为这个类创建构造函数。我希望如下所示
var member = Member.GetCurrentMember();
var memberProfile = new MemberProfile(member);
MemberProfile上的构造函数将如何显示。我需要做一些演员吗?
我建议在MemberProfile
类中添加一个Member
字段,并在构造函数中初始化它。不要继承Member
。
public class MemberProfile {
public Member Member { get; private set; }
public MemberProfile(Member member) { Member = member; }
}
如果你真的想从Member
继承,你必须所有属性关闭传递的参数手动复制到新的实例。
您将需要创建一个构造函数,它将成员作为参数并执行参数的深层副本。
public class MemberProfile : Member
{
public MemberProfile(Member member)
{
base.field1 = member.field1;
base.field2 = member.field2;
.
.
base.fieldn = member.fieldn;
}
}
迈赫达德是正确的; MemberProfile应而不是继承自Member。
对您的应用程序上下文做出一些假设,看起来很有可能在未来的某个时刻某个成员可能拥有多个配置文件。
MemberProfile <<--uses--> Member
,而不是
MemberProfile --is-a--> Member
+1 “不要'Member'继承”。听起来'MemberProfile'不是'Member'的扩展,而只是由它构成的类。在我正在绘制的样机中,我有'MemberProfile'作为'Member'的一个属性;你的建议的反面。我想这两种方式都有可能发挥作用,这取决于@霜的需求。 – JMD 2010-01-18 21:18:25
@JMD:的确,它确实有意义(仅仅基于名称),MemberProfile成为Member的一个属性,而不是其他方式,但从我的问题来看,Member'从你得到的东西您无法控制的现有API(或者您不想修改),并需要以某种方式扩展它。 – 2010-01-18 21:23:09
是啊这是一个现有的api,很酷的感谢家伙很高兴得到抬头 – frosty 2010-01-18 21:26:57