程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#學習筆記4

C#學習筆記4

編輯:C#入門知識

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved