这可能是一个更普遍的问题,但我希望这是一个正确的问题。我不是编写代码的新手,但对VB.net来说有点新鲜。我的背景不是计算机科学,所以我知道从我所学的几门课程,我个人的兴趣和专业需求中我知道。
我想知道的是像字符串这样的变量之间的技术差异:
Dim myString As String
和一个必须实例化的集合之类的变量:
Dim myCollection As Collection
myCollection = New Collection
我意识到后者是一个对象,但是我不确定我理解为什么前者和后者都不以同样的方式实现,而不需要在Visual Basic之外引用?
答案 0 :(得分:2)
对于VBA和VB.NET,答案是不同的。
实际上,在VB.NET中,你做需要实例化一个String
。例如,以下代码在VB.NET中抛出异常:
Dim s As String
Dim same As Boolean = s.Equals("") ' Throws NullReferenceException
它抛出异常的原因是因为您尝试使用当前未引用(指向)任何对象的变量来调用Equals
方法。换句话说,s
变量当前为空(VB中为Nothing
)。要修复它,您需要实例化一个对象,如下所示:
Dim s As String = ""
Dim same As Boolean = s.Equals("") ' Works (same = True)
但是,您的问题仍然有效,因为您不需要实例化某些类型的变量,例如Integer
:
Dim i As Integer
Dim same As Boolean = i.Equals(0) ' Works (same = True)
两者之间的差异是String
是参考类型(a Class
)而Integer
是值类型(a Structure
)。您可以在MSDN here上了解有关差异的更多信息。
在VBA中,差异是相似的,有点黑暗。 VBA有一组核心原始数据类型,不需要实例化(如.NET中的值类型),其他所有内容都被认为是Object
,它需要实例化(如.NET中的引用类型)。此外,VBA允许您创建Structure
类型,这些类型被视为基本类型,因为您不会实例化它们。
为了进一步复杂化,在VBA中,String
是一种原始数据类型,但在VB.NET中它是一种引用类型。