创建一个没有New的对象?

时间:2016-03-27 08:48:50

标签: vb.net

我注意到可以使用或不使用String创建New

Dim s As String

Dim s As New String(" "c, 4)

第二种方式告诉我String是一个类实例。第一种方式表明,可以在不使用New的情况下创建对象。但是,当我尝试创建一个没有New的我自己的类的实例时,我得到一个未初始化的引用错误。我错过了什么?

P.S。:我对自己有一个想法:String被定义为结构,而不是。请确认这是否正确。

2 个答案:

答案 0 :(得分:0)

Dim s As String

这不会创建新的String对象。这声明sString类型的变量。这也是您尝试使用该变量时获得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语句中声明时,您仍然只有一个字符串类型的对象,并且没有为其分配字符串。

没有一个字符串绝对是一个类。