在 Using 语句中通过工厂创建一次性对象
Create disposable object via factory in Using statement
假设基础 class Foo 实现了 IDisposable。 类 FooA
和 FooB
继承 class Foo。一个简单的工厂方法,FooFactory.Create()
returns FooA 或 FooB 对象取决于客户端的需要。
在下面的客户端代码(FooTest 模块)中,尝试在 'Using' 语句中使用工厂方法会导致以下编译错误:
'Using' 资源变量必须有显式初始化。
对于支持通过 Using 语句实例化 FooA 或 FooB(由客户指定)的实现的任何建议(最佳实践),我将不胜感激。不需要工厂 - 这只是我尝试过的方法。理想情况下,我希望 FooA 和 FooB 是独立的 classes,具有共同的基础 class 或接口。
提前感谢您提供的任何帮助。
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
您只是在 Using 行中有语法错误。和Dim一样写,把Dim换成Using:
Using f As Foo = FooFactory.Create("A")
您不能说 "As FooFactory.Create",因为类型必须跟在 "As" 关键字之后。
假设基础 class Foo 实现了 IDisposable。 类 FooA
和 FooB
继承 class Foo。一个简单的工厂方法,FooFactory.Create()
returns FooA 或 FooB 对象取决于客户端的需要。
在下面的客户端代码(FooTest 模块)中,尝试在 'Using' 语句中使用工厂方法会导致以下编译错误:
'Using' 资源变量必须有显式初始化。
对于支持通过 Using 语句实例化 FooA 或 FooB(由客户指定)的实现的任何建议(最佳实践),我将不胜感激。不需要工厂 - 这只是我尝试过的方法。理想情况下,我希望 FooA 和 FooB 是独立的 classes,具有共同的基础 class 或接口。
提前感谢您提供的任何帮助。
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
您只是在 Using 行中有语法错误。和Dim一样写,把Dim换成Using:
Using f As Foo = FooFactory.Create("A")
您不能说 "As FooFactory.Create",因为类型必须跟在 "As" 关键字之后。