我知道vb.net中的所有内容都是一个对象。如果是这种情况,为什么在创建数据表对象时不使用新关键字?
Dim dt as Datatable
dt.coloumns.add()
vs
Dim dt as Datatable = new Datatable
dt.coloumns.add()
两者似乎都做同样的事情。但是,在哪种情况下我应该使用新关键字?是否有特定对象我不需要使用新关键字?我理解,对于像字符串,整数等常见的东西,你不需要实例化对象。 DataTable也是一样吗?
答案 0 :(得分:1)
Dim dt as Datatable
仅仅是变量的声明。它没有初始化它,所以默认情况下dt
的值为空(我相信VB中为Nothing
)。请注意,仅声明该值并非违法,因此您完全有权这样做。
另一方面,Dim dt as Datatable = new Datatable
声明并初始化变量。也就是说,new
将使用适当的值初始化声明的变量。如果一个类有一个接受参数的构造函数,那么你可以使用new
和构造函数来创建该类的新实例,并将你选择的值分配给类属性,而不是使用默认值。
您的示例之间的区别在于dt.Columns.add()
将在第一个示例中引发错误,因为您尝试在null对象上调用方法。在第二种情况下,您使用new
为变量提供初始值。因此,您可以毫无问题地访问非null对象的Columns
属性。
现在让我们来到你的另一点 - "我明白,对于像字符串,整数等常见的东西,你不需要实例化对象。 DataTable也是一样的情况吗?"像Integer
这样的东西是原始数据类型,因此它们具有默认的非空值。如果您没有使用值显式初始化,则它们将采用默认值。例如Dim x As Integer
会自动使x
等于0
对于对象,默认值为null,因此如果您尝试对该对象执行任何操作而不首先为其指定非null值,则会导致问题。有两种方法可以分配非空值:
new
进行初始化。