我有一个小疑问:
str
和str_obj
之间有什么区别; cls
和cls_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
答案 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
时,只能 从类内部访问。
类中的变量也可以声明为Friend
,Protected
和Protected 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