我注意到可以使用或不使用String
创建New
:
Dim s As String
或
Dim s As New String(" "c, 4)
第二种方式告诉我String
是一个类实例。第一种方式表明,可以在不使用New
的情况下创建对象。但是,当我尝试创建一个没有New
的我自己的类的实例时,我得到一个未初始化的引用错误。我错过了什么?
P.S。:我对自己有一个想法:String
被定义为结构,而不是类。请确认这是否正确。
答案 0 :(得分:0)
Dim s As String
这不会创建新的String
对象。这声明s
是String
类型的变量。这也是您尝试使用该变量时获得NullReferenceException
的原因。
Dim s As New String(" "c, 4)
这将变量s
声明为String
类型,并将变量初始化为特定值。
第二种方式告诉我,String是一个类实例。
我对自己有所了解:字符串被定义为结构,而不是类。请确认这是否正确。
String
是一种类型。请参阅official documentation中的定义:
<SerializableAttribute>
<ComVisibleAttribute(True)>
Public NotInheritable Class String
Implements IComparable, ICloneable, IConvertible, IEnumerable,
IComparable(Of String), IEnumerable(Of Char), IEquatable(Of String)
答案 1 :(得分:0)
为了更简单地解释,如果您使用以下代码,
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim a As String
MessageBox.Show(a)
End Sub
Visual Studio仍会在MessageBox行上给出错误: -
变量'a'在被赋值之前使用。在运行时可能会产生空引用异常。
因此,当它在Dim语句中声明时,您仍然只有一个字符串类型的对象,并且没有为其分配字符串。
没有一个字符串绝对是一个类。