Vb.net 在Using语句中通过工厂创建一次性对象
假设基类Foo实现IDisposable。类Vb.net 在Using语句中通过工厂创建一次性对象,vb.net,factory,using-statement,Vb.net,Factory,Using Statement,假设基类Foo实现IDisposable。类FooA和FooB继承类Foo。一个简单的工厂方法,FooFactory.Create()根据客户机的需要返回FooA或FooB对象 在下面的客户端代码(FooTest模块)中,尝试在“Using”语句中使用factory方法会导致以下编译错误: “使用”资源变量必须具有显式初始化。 我非常感谢关于通过Using语句支持FooA或FooB(由客户指定)实例化的实现的任何建议(最佳实践)。不需要工厂——这只是我尝试过的方法。理想情况下,我希望FooA和F
FooA
和FooB
继承类Foo。一个简单的工厂方法,FooFactory.Create()
根据客户机的需要返回FooA或FooB对象
在下面的客户端代码(FooTest模块)中,尝试在“Using”语句中使用factory方法会导致以下编译错误:
“使用”资源变量必须具有显式初始化。
我非常感谢关于通过Using语句支持FooA或FooB(由客户指定)实例化的实现的任何建议(最佳实践)。不需要工厂——这只是我尝试过的方法。理想情况下,我希望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
您只是在使用行中的语法有误。像Dim一样编写,将Dim替换为使用:
Using f As Foo = FooFactory.Create("A")
不能说“As foodfactory.Create”,因为类型必须跟在“As”关键字后面。。谢谢你,斯图尔特。。。并向在这篇文章上浪费时间的人道歉。