2009-07-07 11 views
0

私は基底クラスから継承するクラスを持っています(これには、共通のデータベース関連のものがたくさんあり、MustInheritとしてマークされています)。私は基本クラスメソッドを呼び出す共有メソッドを記述したいと思いますが、コンパイラは 'MyBaseはインスタンスメソッド内でのみ有効です'というメッセージを表示します。この共有メソッドはロギングメソッドであり、アプリケーション内で多く使われます。私はそれを呼び出すたびにオブジェクトをインスタンス化する必要がないようにしようとしています。私は共有メソッドでMyBaseを使用できますか

共有メソッドから基本クラスのメソッドにアクセスすることはできますか?

答えて

3

いいえ、コンパイラーの説明では、共有メソッドからインスタンスメソッドを呼び出すことはできません。

クラスのインスタンスは、他のインスタンスとは別になっているため、そのインスタンスのメソッドを呼び出すたびに異なる結果が生じる可能性があり、インスタンスメソッドとしての副作用は、インスタンスの状態にアクセスできます。共有メソッドは、その型のすべてのインスタンス間で共有されるため、共有メソッドはどのインスタンスの状態にもアクセスできません。

この場合、共有メソッドがインスタンスレスであるため、共有メソッドからインスタンスメソッドを呼び出すことはできません。

1

共有メソッドには状態がないので、インスタンスメソッドを呼び出すことはできませんが、共有メソッドが参照できるフィールドレベルで常にインスタンス化された共有インスタンスが存在するため、あなたのケースでは、あなたのベースを継承するプライベートクラスをmaby

Public Class Foo 
private Shared ReadOnly Instance as New Somthing 

Public Shared Function DooFoo as string 
    return instance.Getstring() 
End Function 

Private class Something : inherits baseclass 
    public function Getstring() as string 
    .... 
    End function 
End Class 



End Class 
+0

これは完全に真実ではありません。共有メソッドはインスタンス状態にアクセスすることはできませんが、共有状態(たとえば共有フィールド)にアクセスできます。 –

+0

はい、ここでやったこと、共有されたフィールド –

+0

私は、共有状態*が*状態なのであなたの言葉が少し不明であることを意味しますが、そのタイプのインスタンスではなく*タイプ*の状態です。 –

0

よう

何かは、あなたが、基本クラスで共有メソッドにアクセスする方法ですか? その場合は、メソッドをprotectedにして、サブクラスでMyBaseキーワードなしで呼び出すだけです。

1

VBでオーバーライド可能なメソッドを共有することはできないため、実際には必要ありません。

関連する問題