物件導向程式設計-物件類別靜態成員宣告的時機,即 static 使用的時機【C#程式設計經驗心得劄記】兼及應用程式的記憶體的管理

☆其實說穿了,所謂的「動態」就是要創建一個類別實例(物件=東西,臺語「物件」即國語「東西」)才能運用該類別內的非靜態成員。而靜態(static)的則是不必創建該類別的實例物件(東西)即能運用的。
所謂的「動態」是如動態配置記憶體一樣,是用完可丟的(Dispose)=始亂終棄的--即可從記憶體清除以騰出記憶體空間的,不是一直留在記憶體中佔位置的。靜態的,找對主詞,什麼東東的態?即記憶體配置是靜態的,一經配置後便與應用程式共存亡,不會也不能再更的;即咬死不放=從一而終的(至此,想Chrome瀏覽器所以性能好又吃記憶體,是否即是「靜態」static用太多的問題?)

 也因此,故此種動態(非靜態之)類別當須「實作 Dispose 方法 | Microsoft Docs」。


準備 fotsPics類別內的方法與成員也都還原回動態配置的。蓋每次呼叫時,不應保留上次的值;除非有每次調用此類別物件時都有不變或共通的值時,才用static 以與各個物件來共用

否則偷雞不著蝕把米,不但得不到方便,貪不到便宜,反而常會當掉,如我開發字型轉字圖的應用程式時,是以 Power Point 來作為匯出字型圖片的工具,就常會因為是用靜態成員來呼叫Power Point的緣故,造成應用程式與 Power Point 間的通訊中斷。將靜態的成員都改成動態以後,就少有當掉(PowerPoint無法取用的例外情形)的情況了。

經驗記錄:

準備 fotsPics類內的方法與成員也都回動態配置的。蓋每次呼叫時,不應保留上次的;除非有每次調用此類別物件時都有不變或共通的值時,才用… · oscarsun72/PPTtoDoc_PowerPoint_xchg_Word@3bd3146 (github.com)

我原來「偷懶」,覺得直接用類別靜態成員就不必再另建構一個實例物件來用,多一道手續,是錯誤的「撇步」,直是聰明反被聰明誤。

其實將類別實例化(instantiation)並沒有想像中的煩雜,只是自己不會活用、應用罷了。

powerPnt.Presentation ppt =
                    fontsPics.prepareFontPPT(fontname, float.Parse(textBox3.Text));
                fontsPics.addCharsSlidesExportPng(wd, ppt, picFolder,

這段本來是用靜態成員的方式來呼叫的程式碼即可簡化寫成:

powerPnt.Presentation ppt =
                    new fontsPics().prepareFontPPT(fontname, float.Parse(textBox3.Text));
                fontsPics.addCharsSlidesExportPng(wd, ppt, picFolder,

不過是多了個new關鍵字和呼叫運算子而已。主要是有()呼叫運算子(call operator),呼叫類別的建構器/建構子(constructor)來用,來建構出一個類別的實例物件以供程式指令之執行。


ps. 自訂的類別應該都要實作 IDispose()方法以釋出記憶體才是。既然在使用它時用到了建構子,自然也當實作此解構子。猶如請神猶須送神也。感恩感恩 南無阿彌陀佛

關於記憶體的管理:

什麼是 Managed 程式碼? | Microsoft Docs



留言

熱門文章