0

クラスにいくつかの拡張メソッドを追加するモジュールを作成しました。このクラスは別の親クラスから継承します。私の拡張メソッドのコードでは、MyBase を使用して基本クラスを参照したいと思います。

これは許可されていないようです (エラー メッセージ: " 'MyBase' はモジュール内では有効ではありません。 ")

<Extension()>
Public Function Get_OutOfSpace(val as ClassA) As Boolean
    Return MyBase.IsOutOfSpace()
End Function

拡張メソッド内で基本クラスのメソッドを呼び出すにはどうすればよいですか?

4

1 に答える 1

1

そのため、モジュール内に拡張メソッドを記述することが強制されるため、MyBase を使用するという間違いを犯すことはありません。しかし、コードには少なくとも 1 つの問題があります。何も拡張していません。拡張メソッドの最初の引数は、拡張したい型のオブジェクトへの参照でなければなりません:

<Extension()>
Public Function Get_OutOfSpace(ByVal obj As Foo) As Boolean
    ''...
End Function

したがって、可能性のある実装はReturn obj.IsOutOfSpace. 拡張したいクラスにはすでに IsOutOfSpace プロパティがあるため、この拡張メソッドを実際にはまったく使用しない可能性が非常に高くなります。

クラスにメソッドを追加するには、拡張メソッドのみを使用してください。クラスを変更できない場合にのみ行ってください。

于 2012-06-07T08:43:42.180 に答える