我正在使用具有「成員」類的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