2017-01-05 1 views
3

機能 "AddWeight"はすべてのペットに重量を追加できます。私はすべての私の動物(Inherit)が同じ名前( "data")のbasicInfo型を持っていることを知っているので、 "AddWeight"関数が適切に処理できると確信しています。異なるタイプの同じ機能を使用するためのvbaのインターフェースの使用

もちろん、Vbaは私にそれをさせません、私はオブジェクトまたはバリアントの関数タイトルで宣言しようとしました。彼らの何も私のために働くものはありません。

誰も創造的なアイデアはありますか?

私はすべての動物のために、この関数を記述するために、私はまた、そのような関数を呼び出すことがエレガント見つからないしたくない:

Call addWeight(Max_Cat.data) 

誰かが別のアイデアを持っていますか?コメントで述べたように、事前

Type basicInfo 
       name As string 
       weight as integer 
       height as integer 
      End Type 

      Type cat 
       data As basicInfo 
       mustacheType As String 
      End Type 

      Type dog 
       data As basicInfo 
       bark_volume as integer 
      End Type 

     Dim Max_Cat as cat 
     Dim Buddy_Dog as dog 
    . 
    . some code 
    . 
     Call addWeight(Max_Cat) 
     Call addWeight(Buddy_Dog) 


     Public Function AddWeight(petName as object) 'not work also for petName as variant 
     petName.data.weight =petName.data.weight+50 

     End Function 
+0

なぜクラスを使用しないのですか?または型名を与えるモジュール?モジュール "cat":cat.addweight(catnameとしてのペットの名前) – Pierre

+0

'petName.date.weight = petName.date.weight + 50'ではなく' petName.data.weight = petName.data.weight + 50'を意味しますか? –

+0

@Pierre私はあなたの答えやそのやり方を理解していません、クラスは型として働くことができますか? – David

答えて

1

のおかげで、これは言葉の厳密な意味での「継承」ではありません。それは複合構造のようなものです。あなた本当には、インタフェースを使用したい場合は

Sub SomeSub() 
    Dim Max_Cat As cat 
    Dim Buddy_Dog As dog 

    'Other stuff. 
    AddWeight Max_Cat.data 
    AddWeight Buddy_Dog.data 
End Sub 

Public Function AddWeight(animal As basicInfo) 
    animal.weight = animal.weight + 50 
End Function 

:あなたはType Sを使用してデータを表現したい場合は、明白な解決策はちょうどあなたがbasicInfoすなわち、操作したいメンバーを渡すことですタイプの代わりにクラスを作成する必要があります。そうすれば、それらに共通のインターフェースを実装させてから、そのインターフェースをパラメーターとして使用することができます。これはおそらく、より堅牢で拡張可能なコードを提供するでしょう。

関連する問題