c# 類 ,靜態類 , 靜態欄位, 靜態方法

來源:互聯網
上載者:User

本周的研究內容是   類的各種形態  以及應用情境。 靜態類  靜態方法 , 以及靜態類 的理解和應用情境。

從書上看到的一點講解 :

1 不管類型本身是否是靜態類型,都可以包含靜態方法,和靜態欄位, 有了靜態欄位最好是有靜態建構函式,用來初始化類型裡面的靜態欄位?

2 對於抽象類別的理解 :不是具體的感念,而是一類概念的共性 。 應該和結構的概念差不多。  比如圓形  三交行 梯形 都是一種形狀,但是形狀有是什麼那,這個時候就可以定義一個形狀的抽象類別。 

3 靜態類 ,靜態方法,靜態欄位應該是放到棧中,地址是確定的,所以沒有建立執行個體的時候這個方法,欄位就是確定的。 而非靜態類,分靜態方法 ,非靜態欄位是放到堆中的,只有程式員建立了他們的執行個體 ,這個地址才是確定的,才可以進行訪問。

4 不要濫用靜態類和靜態方法,打著oo的編程旗號 寫出了太多了面向過程的程式。 

為什麼類裡面要使用靜態欄位,靜態方法。為什麼要在一個類裡面既有靜態欄位,方法,又有非靜態欄位,方法,為什麼要放到一起? 這是一個疑惑。?

我倒是知道一個應用情境 就是單例模式 ? 還有其他的應用情境嗎 ?

靜態方法和靜態欄位的應用情境總結 :

A 單例模式

B 和類型的執行個體無關的欄位和方法。

C 製作工作類

學習靜態方法的代碼 如下 

using System;using System.Data;using System.Text;namespace  myStu{/*     學習靜態欄位,靜態方法 , 以及單例模式的實現*/class programe{   static void Main(string[] arg){try{  baseClass.getInstanceCount() ;    baseClass  obj = new baseClass() ;obj.Test() ;    baseClass.getInstanceCount() ;}catch (Exception err){Console.WriteLine(err.Message);}}}    sealed class baseClass    {private static int instanceCount = 0  ;public static void getInstanceCount(){Console.WriteLine("當前類的執行個體個數是" + instanceCount.ToString()) ;}        public void Test()        {instanceCount = instanceCount +1 ;//執行個體的個數加1 Console.WriteLine("建立執行個體") ;          }    }}

c#單例模式的實現代碼 

using System;using System.Data;using System.Text;namespace  myStu{/*     學習靜態欄位,靜態方法 , 以及單例模式的實現*/class programe{   static void Main(string[] arg){try{  baseClass.getInstanceCount() ;    //這麼些是錯誤的,因為建構函式已經是私人的,不能建立執行個體,只能在單例模式裡面建立baseClass  obj3 = new baseClass() ;//obj.Test() ;baseClass obj = baseClass.CreateInstance() ;    baseClass.getInstanceCount() ;baseClass obj1 = baseClass.CreateInstance() ;    baseClass.getInstanceCount() ;}catch (Exception err){Console.WriteLine(err.Message);}}}    sealed class baseClass    {static baseClass obj = null ;static int instanceCount = 0  ;public static void getInstanceCount(){Console.WriteLine("當前類的執行個體個數是" + instanceCount.ToString()) ;}        baseClass()        {instanceCount = instanceCount +1 ;//執行個體的個數加1 Console.WriteLine("建立執行個體") ;          }public static  baseClass CreateInstance(){if (obj == null ){obj =  new baseClass() ;//這裡有一個疑問, 這樣建立執行個體的時候不調用建構函式嗎?經過驗證,這裡也是要調用建構函式的?}return obj  ;}    }}

單例模式的運行結果

---------- run ----------=============== 運行C#程式 Write By  森晉科技===============當前類的執行個體個數是0建立執行個體當前類的執行個體個數是1當前類的執行個體個數是1=============== 程式結束 Copy cicnor 2001===============Output completed (0 sec consumed) - Normal Termination

另外給大家說一個秘密 我的所有的測試代碼都是在editpllus裡面編寫的,編譯的,這樣的好處很多,

A 脫離了編譯器,代碼都的自己寫,很多關鍵字啊,什麼的都記住了。

B 因為什麼都是靠記憶來寫代碼,對很多知識的理解加深了, 

所有說要是學習 就用editplus來寫代碼 要是工作就用vs ,智能提示的功能確實是能加快開發效率。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.