C#學習筆記4。本站提示廣大學習愛好者:(C#學習筆記4)文章只能為提供參考,不一定能成為您想要的結果。以下是C#學習筆記4正文
1.C#只支持單一承繼,若想要完成多重承繼的效果。有2種方式:
第一種為傳遞承繼,A為基類,B承繼A,C承繼B,經過傳遞來增迭要包括的元素,但這種承繼的設計,在業務上具有分明的附屬關系。
第二種為聚合,在關聯關系中,假如定義了容納對象的一個中心組件,就會發作聚合。關於多重承繼,這觸及挑選一個類作為次要基類(PdaItem),然後從中派生出個新類 (Contact),第二個希望的基類(Person)作為派生類(Contact)中的一個字段添加。接著字段 (Person) 上的一切非公有成員都在派生類(Contact) 上重新定義。然後,派生類 (Contact) 將調用委托給字段 (Person)。由於辦法要重新聲明,所以一些代碼會反復,但是反復的代碼不會根多,由於實踐的辦法主體只在聚合類 (Person)中完成。
2.不要在結構器中調用會影響所結構對象的任何虛辦法,由於假設這個虛辦法在以後要實例化的類型的派生類型中停止重寫,就會調用重寫的完成。但在承繼層次構造中,基類正在結構而派生類還沒結構。所以,調用虛辦法將招致無法預測的行為。
3.new修飾符:new 關鍵字可以顯式隱藏從基類承繼的成員。隱藏承繼的成員時,該成員的派生版本將交換基類版本。雖然可以在不運用 new 修飾符的狀況下隱藏成員,但會生成正告。假如運用 new 顯式隱藏成員,則會取消此正告,並記載要交換為派生版本這一現實。
4.sealed修飾符:除了可以修飾類(密封類,不能派生),virtual成員也可以密封,如A類有個虛辦法Say(),B類承繼後重寫Say(),B類為了不讓前面的派生類重寫Say(),可以運用sealed修飾。
5.is運算符:不只僅是反省數據能否可以轉換到目的類型,且還會反省對象自身類型能否真的是目的類型。因而可以強迫轉換的對象,不一定是目的類型。如Thing類代碼。
public class Thing { public static explicit operator string(Thing thing) { return thing.ToString(); } public override string ToString() { return "Thing"; } public static void Test() { string s = "text"; Thing t = new Thing(); object o = t; Trace.Assert(!(t is string)); Trace.Assert((string)t == "Thing"); o = s; Trace.Assert((string)o == "text"); Trace.Assert(o is string); Console.WriteLine("Ok"); } } public class PdaItem { public DateTime CreateTime { get; set; } public DateTime ModifyTime { get; set; } public string Name { get; set; } protected string ObjectKey { get; set; } } public class Contact : PdaItem { private Person internalPerson;//Person類的詳細代碼,在上一章已列出 public string Address { get; set; } public string Phone { get; set; } public string FirstName { get { return internalPerson.FirstName; } set { internalPerson.FirstName = value; } } public string LastName { get { return internalPerson.LastName; } set { internalPerson.LastName = value; } } }
---------------------以上內容依據《C#實質論 第三版》停止整理