2010-06-29 75 views
7

我正在爲VBA中的OOP(面向對象編程)構建一些材料。 任何人都可以列出VBA中可用的OOP概念嗎?可用的OOP概念列表

例如,從我的閱讀中,我發現:

  1. 繼承是不VBA中。
  2. 封裝的概念在那裏,因爲你可以使用訪問修飾符「私人」,並建立一個公共財產。
+0

http://stackoverflow.com/documentation/vba/5357/object-oriented-vba – Slai 2016-08-14 02:15:57

回答

4

這裏有一些意見我已經與OOP概念在工作時VBA製作:

  • 你不能重載在VBA方法。但是,您的一次性使用可選參數,無論好壞。
  • 您有一個無參數Class_Initialize方法,該方法在實例化對象時調用,但不能重載以處理參數。如果你想強制你的課程在沒有設定特定屬性的情況下不能「完全實用」,那麼你必須編寫自己的方式來做到這一點。
  • VB6和VBA編輯環境強制您構建「類文件」並將每個類保存在與模塊不同的單獨文件中。
  • 類和模塊都可以有公共和私有字段。模塊中的公共字段本質上是一個全局變量。
  • 模塊在功能上類似於C#中的靜態類。公共代碼可以從應用程序中的任何位置的模塊中調用。

VB6/VBA範例將類設想爲封裝對象的功能和屬性的一種方法。在這個意義上,VB6/VBA的對象就像任何其他基本的OOP環境一樣存在,並且在適當的時候應該鼓勵它們的使用和設計。

但是,由於缺少幾個關鍵的OOP特性,導致VB6/VBA在徹底實現完整的OOP設計模式時失敗。

+0

VBA實際上支持接口,一個名爲IFoo的抽象類可以在任何其他類中使用'Implements IFoo'實現,全部其中可以作爲IFoos傳遞。 – 2010-06-29 17:04:44

+0

@Alex是的。我忘記了VB6中的接口,因爲如果我記得,它們的使用仍然相當有限。 – 2010-06-29 17:45:48

5

VBA支持一些面向對象的概念,而不是其他的。

使用VBA,您可以創建自己的類,並且可以從這些類創建對象。但是,VBA不支持繼承,並且不能真正支持用於OO語言(如C++或.NET)的術語的經典含義中的'多態性'。

VBA類支持封裝和抽象。

0

VBA中的一個特殊缺點是封裝了對象數組。

您可以擁有對象數組,但不能向下多個級別。 解決方法存在,例如通過使用Variant類型,但是然後鬆散類型安全性。 這使得使用分層對象結構很麻煩,而可能會導致代碼錯亂。