Angenommen, Basisklasse Foo implementiert IDisposable. Die Klassen FooA
und FooB
erben Klasse Foo. Eine einfache Factory-Methode, FooFactory.Create()
, gibt entweder ein FooA- oder ein FooB-Objekt zurück, je nach den Anforderungen des Clients.Erstellen Sie Einweg-Objekt über Factory in Using-Anweisung
Im Client-Code (FooTest Modul), versucht, die Factory-Methode in einer verwenden ‚Mit‘ Aussage führt zu dem folgenden Compiler-Fehler:
‚Mit‘ Ressourcenvariable eine expliziten Initialisierung haben muss.
Ich würde mich über Vorschläge (Best Practices) bezüglich einer Implementierung freuen, die die Instanziierung von FooA oder FooB (vom Client angegeben) über die Using-Anweisung unterstützen würde. Eine Fabrik ist nicht erforderlich - es ist einfach der Ansatz, den ich ausprobiert habe. Im Idealfall möchte ich, dass FooA und FooB separate Klassen mit einer gemeinsamen Basisklasse oder Schnittstelle sind.
Vielen Dank im Voraus für Ihre Hilfe.
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. Danke Stuart. ... und entschuldige mich bei allen, die auf diesem Posten Zeit verloren haben. – mjr