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#實質論 第三版》停止整理