2010-01-18 167 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