1

クラスをグローバルに宣言したい ここに私の例があります:

次のように見えるクラス clsIEError を使用したい:

Option Explicit

Public Sub m(msg As String, Optional title As String = "Title:")

    'Attribute Value.VB_UserMemId = 0

    'this method will be used as defualt method
    'and here are attributes msg and title used to create some inteface
End Sub

そして、これがどのように機能するかです

Sub CATMain()

     Dim ie As clsIEError
     Set ie = New clsIEError

     ie "test", "title"

     Set ie = Nothing
End Sub

しかし、私の問題は、それをグローバルに使用したいということです

Option Explicit

Public ie As clsIEError

Private Function Init()
    Set ie = New clsIEError
End Function

Sub CATMain()
    Call Init

'   and to use it same as in example 1    
    ie "test", "title" 

'   but i am able to use it only like:
'   ie.m "test", "title" 'works as expected 

    Set ie = Nothing
End Sub

パブリックデフォルトメソッドが機能しないのはなぜですか?

4

2 に答える 2

1

あなたが説明したように、これが機能しないことを確認できます。実行時に「Expected procedure, not variable」が表示されますが、コンパイル エラーは発生しません。これは VB パーサーのバグに違いありませんが、それが私が思いつく唯一の説明です。

属性は要素名と一致する必要があると常に考えていました。あなたが持っている場所

Attribute Value.VB_UserMemId = 0

私はあなたが持っているべきだと思いました

Attribute m.VB_UserMemId = 0

しかし、どちらの方法でも(ローカルで宣言された変数を使用して)機能するようです。ひどい答えですが、答えはメソッドを明示的に呼び出すことです。ごめん。

于 2013-01-23T23:28:43.383 に答える
0

あなたの質問に明示的に答えられるかどうかはわかりませんが、私の場合は、プロジェクト全体でアクセスできるクラスのインスタンスを作成したかったのです。基本的に、静的クラスまたはシングルトンを作成する必要がありました。この投稿は非常に役に立ちました。

于 2013-03-08T18:03:03.767 に答える