繁体   English   中英

vb.net需要在声明时分配

[英]vb.net require assignment on declaration

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

例如,如果我有:

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

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

Dim MyObject As Library.ObjectClass = FunctionThatReturnsObject(Parameter)

我知道我可以为ObjectClass构造一个构造函数,该构造函数调用FunctionThatReturnsObject,但是我一直使ObjectClass实例完全为空,因为我不理会声明它们而不分配它们。

有办法防止这种情况吗?

有办法防止这种情况吗?

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

由于VB默认初始化所有已声明(但未初始化)的对象,因此无法强制执行其他初始化。

但是,您发布的示例代码实际上并没有任何意义:防止以下代码很简单:

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

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

另一种方法是使用在类上定义的共享函数。 共享功能将有权访问同一类的私有成员。 获取新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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM