vb.net需要在声明时进行分配

时间:2015-08-25 19:32:16

标签: vb.net

有没有办法要求在声明中为对象类赋值?

例如,如果我有:

Dim MyObject As New Library.ObjectClass
MyObject = FunctionThatReturnsObject(Parameter)

我可以更改ObjectClass,使其不能用“New”声明,并且必须用作:

Dim MyObject As Library.ObjectClass = FunctionThatReturnsObject(Parameter)

我明白我可以为ObjectClass构建一个调用FunctionThatReturnsObject的构造函数,但是我一直在让ObjectClass的实例完全为空,因为我心不在焉地声明它们而没有分配它们。

有没有办法阻止这种情况?

2 个答案:

答案 0 :(得分:0)

  

有没有办法阻止这种情况?

不完全。你可以做的一件事是构造函数Private,而是提供一个返回构造对象的Public Shared函数。这有时是一件很有用的事情,但它无法解决您的实际问题:确保您的类型的每个对象都已正确初始化。

因为VB默认初始化所有声明的(但未初始化的)对象,所以无法强制执行不同的初始化。

但是,您发布的示例代码无论如何都没有意义:阻止以下代码是微不足道的:

Dim MyObject As New Library.ObjectClass
MyObject = FunctionThatReturnsObject(Parameter)

只需声明一个带参数的构造函数,或者将构造函数设为私有。这将阻止用户使用New ObjectClass

答案 1 :(得分:0)

另一种方法是使用在类上定义的共享函数。共享函数可以访问同一个类的私有成员。获取新MyObject的唯一方法是调用MyClass.FunctionThatReturnsObject()

Public Class MyClass

    Private _parameter As String

    Private Sub New()


    End Sub

    Private Sub New(parameter As String)
        _parameter = parameter
    End Sub

    Public Shared Function FunctionThatReturnsObject() As MyClass

        Dim myObject As New MyClass("a parameter")

        'Or you could manipulate the private paraemters directly...
        'myObject._parameter = "a parameter"
        Return myObject

    End Function

End Class