基本クラスFooはIDisposableを実装するものとします。クラスFooA
およびFooB
はFooクラスを継承します。単純なファクトリメソッドFooFactory.Create()
は、クライアントのニーズに応じてFooAオブジェクトまたはFooBオブジェクトを返します。以下のコンパイルエラーに「を使用」ステートメントの結果にファクトリメソッドを使用しようとする以下のクライアントコード(FooTestモジュール)で 使い捨てオブジェクトの作成usingステートメント
。
FooAまたはFooB(クライアントによって指定された)のインスタンス化をサポートする実装については、Usingステートメントを使用していただければ幸いです。ファクトリは必須ではありません。これは単に私が試したアプローチです。理想的には、FooAとFooBを共通の基本クラスまたはインタフェースを持つ別々のクラスにしたいと思います。
お手数ですがお寄せいただきありがとうございます。
Public Module FooTest
Public Sub Test()
'the following compiles:
Dim f As Foo = FooFactory.Create("A")
f.DoWork()
f.Dispose()
'the following causes a compile error:
''Using' resource variable must have an explicit initialization.
Using f As FooFactory.Create("A")
f.DoWork()
End Using
End Sub
End Module
Public Module FooFactory
Public Function Create(ByVal AorB As String) As Foo
If AorB = "A" Then
Return New FooA
Else
Return New FooB
End If
End Function
Public Class FooA : Inherits Foo
End Class
Public Class FooB : Inherits Foo
End Class
Public MustInherit Class Foo : Implements IDisposable
Public Overridable Sub DoWork()
End Sub
Public Overridable Sub Dispose() Implements IDisposable.Dispose
End Sub
End Class
End Module
Ugh。スチュアートに感謝します。このポストで時間を無駄にした人には謝罪します。 – mjr