为什么在创建DataTable对象时不使用new?

时间:2014-07-11 03:32:32

标签: vb.net

我知道vb.net中的所有内容都是一个对象。如果是这种情况,为什么在创建数据表对象时不使用新关键字?

Dim dt as Datatable
dt.coloumns.add()

vs

Dim dt as Datatable = new Datatable
dt.coloumns.add()

两者似乎都做同样的事情。但是,在哪种情况下我应该使用新关键字?是否有特定对象我不需要使用新关键字?我理解,对于像字符串,整数等常见的东西,你不需要实例化对象。 DataTable也是一样吗?

1 个答案:

答案 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值,则会导致问题。有两种方法可以分配非空值:

  1. 使用new进行初始化。
  2. 直接指定一个值,该值是代码中某些其他处理的结果。