【问题标题】:Why is new not used when a DataTable object is created?为什么创建 DataTable 对象时不使用 new?
【发布时间】:2014-09-01 14:28:09
【问题描述】:

我知道 vb.net 中的一切都是对象。如果是这样,为什么创建数据表对象时不使用new关键字?

Dim dt as Datatable
dt.coloumns.add()

对比

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

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

【问题讨论】:

    标签: vb.net


    【解决方案1】:

    Dim dt as Datatable 仅仅是变量的声明。它不会初始化它,所以默认情况下dt 的值为空(我相信VB 中的Nothing)。请注意,仅声明值根本不是非法的,因此您完全有权这样做。

    另一方面,Dim dt as Datatable = new Datatable 声明和初始化变量。也就是说new会用合适的值初始化声明的变量。如果一个类有一个接受参数的构造函数,那么您可以使用 new 和构造函数来创建该类的新实例并将您选择的值分配给类属性,而不是使用默认值。

    您的示例之间的区别在于dt.Columns.add() 将在第一个示例中引发错误,因为您试图在空对象上调用方法。在第二种情况下,您使用new 为变量提供初始值。因此,您可以毫无问题地访问非空对象的Columns 属性。

    现在让我们来谈谈你的另一点 - “我知道对于字符串、整数等常见的东西,你不需要实例化对象。DataTable 也一样吗?” Integer 之类的东西是原始数据类型,因此它们具有默认的非空值。如果您没有使用值显式初始化,它们将采用默认值。例如Dim x As Integer 会自动使 x 等于 0

    对于对象,默认值为 null,因此如果您尝试对该对象执行任何操作而不先为其分配非 null 值,则会导致问题。分配非空值有两种方式:

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

    【讨论】:

    • 感谢您的回复。但是,我不需要 new 关键字。我没有收到任何错误。代码工作正常。只是为了修正我的问题 - 为什么在创建 DataTable 的实例时不需要 new ?
    • @SamsonBujju 我很确定第一个示例会引发错误。检查这个:rextester.com/ACPYTJ71222
    • 我认为你是对的。您如何看待这篇文章中的第二个答案?它是在没有实例化对象的情况下完成的。 stackoverflow.com/questions/5239469/vb-net-creating-data-table
    • 第二个答案会有同样的错误。我相信它只是为了展示如何添加列和行,而不是一个现成的解决方案
    • 我认为我没有很好地解释我的问题。请访问链接。如果数据表正在接收一个值,则不需要使用新关键字。 rextester.com/ZBE85595
    猜你喜欢
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多