none
使用 Class Shared Function 還是 Module Function 的抉擇? RRS feed

  • 問題

  • (In VB2008 + .Net Framework 3.5)

     

    我有一些常常要用到的函式,我將它們做成全域的 Function (或 Sub),以下二種方式都 OK :

     

    1. 把這些 Function(或 Sub) 放在一個 Module 裡,像這樣:

    Code Snippet

    Module modMyModule

        Public Function1(....)

            .....

        End Function

     

        Public Function2(....)

            .....

        End Function

        ....

        ....

        ....

    End Module

     

     

    然後後續在專案中任何地方就可以直接呼叫使用。

     

    2. 把這些 Function(或 Sub) 放在一個 Class 裡,像這樣:

    Code Snippet

    Class clsMyClass

        Public Shared Function1(....)

            .....

        End Function

     

        Public Shared Function2(....)

            .....

        End Function

        ....

        ....

        ....

    End Class

     

     

    之後在需要用的時候這樣即可呼叫使用: clsMyClass.Function1(...)

     

     

    以上二種方式的差異我只知道:

    A. Module 是在專案執行時就載入記憶體;Class 是在用到的時候才載入記憶體。

    B. Module 的執行效率比 Class 快一些些。 (不過通常來說似乎感覺不太出來就是了~)

     

    請問其它的還有什麼不一樣嗎?當有大量的自製 Function (或 Sub) 的時候,該使用那種方式好呢?亦或只是個人習慣問題,沒差?

     

     

    謝謝唷~~

     

     

    .

    2009年1月6日 上午 02:13

解答

  • 在 OOP 的概念下,其實 module 是不存在的,如果要遵循 OOP 方法的話,Module 應該要改為 Class with static members(VB 是為了學習和習慣上的相容性才留下來的),這兩種其實是相同的,至於你說的 Class 只會在用到時載入,那是一般的 class,static class 在執行時就會載入,不會等到需要時,而且會一直保留到程式結束才會釋放。

     

    2009年1月6日 上午 03:08
    版主

所有回覆

  • 在 OOP 的概念下,其實 module 是不存在的,如果要遵循 OOP 方法的話,Module 應該要改為 Class with static members(VB 是為了學習和習慣上的相容性才留下來的),這兩種其實是相同的,至於你說的 Class 只會在用到時載入,那是一般的 class,static class 在執行時就會載入,不會等到需要時,而且會一直保留到程式結束才會釋放。

     

    2009年1月6日 上午 03:08
    版主
  • 喔~ 原來是這樣,了解了。  謝謝~ ^^

    2009年1月6日 上午 09:47
  • 請教

    樓上的嘉諦所提的問題。

    我一直不太懂關於CLASS及MODULE,最大差異。
    版主大大可以在多說關於CLASS及MODULE的差異嗎?

    另外CLASS與CLASS之間,可以互相引用嗎?該要如何用呢?


    謝謝
    2010年1月5日 上午 06:19
  • 如果你未來打算讓程式碼自動轉到 C# ,用 Class 靜態方法比較方便,純用 VB 是差別不大。

    打算跟 ASP.NET 共用程式碼的話,也是用 Class 靜態方法比較方便。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年1月5日 上午 06:25
  • 謝謝

    2010年1月5日 上午 09:51