Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在Using语句中通过工厂创建一次性对象_Vb.net_Factory_Using Statement - Fatal编程技术网

Vb.net 在Using语句中通过工厂创建一次性对象

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

假设基类Foo实现IDisposable。类
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”关键字后面。

。谢谢你,斯图尔特。。。并向在这篇文章上浪费时间的人道歉。