本周的研究內容是 類的各種形態 以及應用情境。 靜態類 靜態方法 , 以及靜態類 的理解和應用情境。
從書上看到的一點講解 :
1 不管類型本身是否是靜態類型,都可以包含靜態方法,和靜態欄位, 有了靜態欄位最好是有靜態建構函式,用來初始化類型裡面的靜態欄位?
2 對於抽象類別的理解 :不是具體的感念,而是一類概念的共性 。 應該和結構的概念差不多。 比如圓形 三交行 梯形 都是一種形狀,但是形狀有是什麼那,這個時候就可以定義一個形狀的抽象類別。
3 靜態類 ,靜態方法,靜態欄位應該是放到棧中,地址是確定的,所以沒有建立執行個體的時候這個方法,欄位就是確定的。 而非靜態類,分靜態方法 ,非靜態欄位是放到堆中的,只有程式員建立了他們的執行個體 ,這個地址才是確定的,才可以進行訪問。
4 不要濫用靜態類和靜態方法,打著oo的編程旗號 寫出了太多了面向過程的程式。
為什麼類裡面要使用靜態欄位,靜態方法。為什麼要在一個類裡面既有靜態欄位,方法,又有非靜態欄位,方法,為什麼要放到一起? 這是一個疑惑。?
我倒是知道一個應用情境 就是單例模式 ? 還有其他的應用情境嗎 ?
靜態方法和靜態欄位的應用情境總結 :
A 單例模式
B 和類型的執行個體無關的欄位和方法。
C 製作工作類
D
學習靜態方法的代碼 如下
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 ,智能提示的功能確實是能加快開發效率。