有没有办法要求在声明中为对象类赋值?
例如,如果我有:
Dim MyObject As New Library.ObjectClass
MyObject = FunctionThatReturnsObject(Parameter)
我可以更改ObjectClass,使其不能用“New”声明,并且必须用作:
Dim MyObject As Library.ObjectClass = FunctionThatReturnsObject(Parameter)
我明白我可以为ObjectClass构建一个调用FunctionThatReturnsObject的构造函数,但是我一直在让ObjectClass的实例完全为空,因为我心不在焉地声明它们而没有分配它们。
有没有办法阻止这种情况?
答案 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