2010-01-18 131 views
2

我正在使用具有“成员”类的API。我希望扩展这个,所以我创建了“MemberProfile”,它继承自“Member”C#继承问题

我有一些问题为这个类创建构造函数。我希望如下所示

var member = Member.GetCurrentMember(); 
    var memberProfile = new MemberProfile(member); 

MemberProfile上的构造函数将如何显示。我需要做一些演员吗?

回答

10

我建议在MemberProfile类中添加一个Member字段,并在构造函数中初始化它。不要继承Member

public class MemberProfile { 
    public Member Member { get; private set; } 
    public MemberProfile(Member member) { Member = member; } 
} 

如果你真的想从Member继承,你必须所有属性关闭传递的参数手动复制到新的实例。

+0

+1 “不要'Member'继承”。听起来'MemberProfile'不是'Member'的扩展,而只是由它构成的类。在我正在绘制的样机中,我有'MemberProfile'作为'Member'的一个属性;你的建议的反面。我想这两种方式都有可能发挥作用,这取决于@霜的需求。 – JMD 2010-01-18 21:18:25

+0

@JMD:的确,它确实有意义(仅仅基于名称),MemberProfile成为Member的一个属性,而不是其他方式,但从我的问题来看,Member'从你得到的东西您无法控制的现有API(或者您不想修改),并需要以某种方式扩展它。 – 2010-01-18 21:23:09

+0

是啊这是一个现有的api,很酷的感谢家伙很高兴得到抬头 – frosty 2010-01-18 21:26:57

0

您将需要创建一个构造函数,它将成员作为参数并执行参数的深层副本。

public class MemberProfile : Member 
{ 
    public MemberProfile(Member member) 
    { 
     base.field1 = member.field1; 
     base.field2 = member.field2; 
      . 
      . 
     base.fieldn = member.fieldn; 
    } 
} 
3

迈赫达德是正确的; MemberProfile应而不是继承自Member。

对您的应用程序上下文做出一些假设,看起来很有可能在未来的某个时刻某个成员可能拥有多个配置文件。

MemberProfile <<--uses--> Member 

,而不是

MemberProfile --is-a--> Member