日期:2014-05-20  浏览次数:20795 次

生手的初级问题(关于New关键字)
SqlCommandBuilder   thisBuilder   =   new   SqlCommandBuilder(thisAdapter)   DataSet   thisDataSet   =   new   DataSet()   ;
以上两句各是声明各自类的一个实例
而下面这句:
DataRow   thisRow   =   thisDataSet.Tables[ "Customers "].NewRow()
写法却不同于上面,
如果我用类似
DataRow   thisRow   =   new   DataRow()   的语句,该如何实现?
(这句话是错的,编译不通过)
再下面一句:
string   abc   ;

DataRow   thisRow   =   thisDataSet.Tables[ "Customers "].NewRow()
有何区别?
我如何才能知道哪些要用new关键字声明,而哪些不用?



------解决方案--------------------
构造方法是保护或者私有时则不允许用new创建对象。

DataRow在调用NewRow时还构造了行的结构,如有多少个字段,每个字段是什么属性,而用new则无法构成这些。
------解决方案--------------------
DataRow thisRow = thisDataSet.Tables[ "Customers "].NewRow()
是按照这个table的结构 增加一个新行,相当于执行一个方法或者函数。而不是来new的
string abc ;

DataRow thisRow = thisDataSet.Tables[ "Customers "].NewRow()
有何区别?
第一个是生命一个变量 未分配空间。
第二个是一个table 执行了一个增加新行的方法
------解决方案--------------------
//按照我的理解 DataRow thisRow = thisDataSet.Tables[ "Customers "].NewRow()
//就是声明了 DataRow 的一个实例 thisRow,
//然后把 thisDataSet.Tables[ "Customers "].NewRow() 生成的一个新行赋给 thisRow这个实例

应该说声明了一个变量,然后把此变量的引用指向NewRow方法生成的一个新行(这才是实例)
------解决方案--------------------
举个不太恰当的例子,你new一个女人容易,
Women w = new Women();
但你要new一个女人肚子里的baby很复杂:
除了一些少儿不宜的过程,还要建立起women与baby的复杂关系,
Baby b = new Baby(Women, Father, Sex, MakeLoveTime....)
b.生存环境 = w.子宫
b.脐带 = w.血管
.....
还不如把这个过程作为女人的一项功能:
Baby b = w.NewBaby();
:)