VB中的对象声明

时间:2016-06-27 07:17:39

标签: vb.net winforms

我有一个小疑问:

strstr_obj之间有什么区别; clscls_obj

他们都是对象.. ??

(因为它们是以不同的语法声明的,所以有疑问)。

有人可以详细说明吗?

提前致谢。

Public Class Form1

    Public Structure dayplan_str

        Public a As Integer
        Public b As String
        Public c As Boolean

    End Structure

    Public Class dayplan_cls
        Public a As Integer
        Public b As String
        Public c As Boolean
    End Class

    Public str As dayplan_str   'structure
    Public cls As dayplan_cls  'class
    Dim str_obj As dayplan_str = New dayplan_str  'structure
    Dim cls_obj As dayplan_cls = New dayplan_cls  'class


    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        str.a = 5
        cls.a = 6
        str_obj.a = 7
        cls_obj.a = 8

    End Sub

End Class

3 个答案:

答案 0 :(得分:1)

“cls”和“cls_obj”之间的区别在于声明。它们都是对象,但在“new cls_obj”中,新对象也被初始化。区别如下:

Dim k as long
Dim i as long
i = 0

在你的情况下,cls_obj是我。

编辑:关于public and dim - 使用dim声明的值只能从声明它的模块中看到。 public的值在所有模块中都可见。

答案 1 :(得分:1)

Public str As dayplan_str   'structure

这是一个名为str

的dayplan_str对象的声明
Dim str_obj As dayplan_str = New dayplan_str  'structure

这是一个名为str_obj

的dayplan_str对象的声明和初始化

答案 2 :(得分:1)

Public str As dayplan_str   'structure

这声明了一个名为str的变量,它可以保存对dayplan_str类型对象的引用。 dayplan-str恰好是一个结构,但它也可以是一个类。

变量str尚未初始化。它目前不包含对任何特定对象的引用。如果您尝试在表达式中使用变量str,则会得到NullReferenceException

Public str_obj As dayplan_str = New dayplan_str  'structure

这声明了并初始化一个名为str_obj的变量。

与前一个声明一样,它也声明了一个变量,它可以保存对dayplan_str类型对象的引用,但是该语句的第二部分(等号后的部分)初始化变量通过调用dayplan_str结构的构造函数并创建一个新对象。

如果在表达式中使用变量str_obj,它将正常工作(无NullReferenceException),因为它已初始化为指向有效的dayplan_str对象。

据推测,这就是这个名字的来源。后缀_obj表示str_obj是指实际对象,而str则不是。

但是,您可以轻松初始化str,使其确实指向有效对象:

str = New dayplan_str

这与第二种形式具有相同的效果,它只是将声明和初始化分散到两行,而不是将它们全部保存在一行中。

通常,您希望在声明时初始化变量,因此第二个(组合)形式是首选。如果你有一个特殊的原因需要在有意义地初始化变量之前声明变量,你只能使用这个分离的形式。

但是,代码中的两个声明之间还有另一个区别,那就是 scope 之一。更具体地说,它是变量可访问性的差异。

当您将类级变量声明为Public时,可以从类内部和类外部访问它。

当您将类级变量声明为Private时,只能 从类内部访问。

类中的变量也可以声明为FriendProtectedProtected Friend。有关这些访问说明符的含义的更多详细信息,请参阅文档。

Dim关键字非常陈旧,从经典的BASIC编程语言进入VB.NET。它只是意味着“维度”,是一种声明变量的通用方法。由于它的历史,它没有任何内在的访问规范。在VB.NET中用Dim声明的变量的可访问性取决于声明该变量的上下文。当它在类范围内声明时,就像你的情况一样,它的可访问性将是私有的。所以从这个意义上来说:

Dim str_obj As dayplan_str = New dayplan_str  'structure

相当于:

Private str_obj As dayplan_str = New dayplan_str  'structure

这是另一种与以下方式不同的方式:

Public str_obj As dayplan_str = New dayplan_str  'structure