关于DataColumn类与DataColumnCollection类的问题困扰我很久,望前辈解惑。

mlroom 2014-12-30 03:34:32
一是DataColumnCollection是怎么被DataTable类实例化的?因为我无法用new直接实例化它,这种现象普遍存在于.NET中。
二是DataColumn中的Table字段是只读的(定义中只有get,无set)那么,当我new了一个DataColumn时,这个DataColumn的Table字段是NULL,为什么当由DataTable.Columns.Add()添加后,DataColumn.Table字段被赋值了,怎么做到的?
...全文
941 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
publicX 2015-03-31
  • 打赏
  • 举报
回复
DataColumnCollection(DataTable table) 虽然可以让DataTable.Columns 中有 DataTable的引用 但是 , DataColumn.Table 仍然是只读,.net 是如何给 DataColumn.Table赋值的呢 高手再来解释下
於黾 2014-12-30
  • 打赏
  • 举报
回复
引用 3 楼 mlroom 的回复:
谢谢你的回答,第二个问题我有些懂了。 但是第一个问题我是想问,即然无法用new来实例化某类型,那么对于另一个对象又是怎样在其内部实例化这个无法用new实例化的类哪?
其实就类似 DataRow dr=dt.NewRow(); 而不能DataRow dr=new DataRow(); 具体你可以看看dt.NewRow()里到底都干了些什么 .net不是开源了吗,能看到源码的
mlroom 2014-12-30
  • 打赏
  • 举报
回复
噢,天哪,突然懂了,谢谢两位。
mlroom 2014-12-30
  • 打赏
  • 举报
回复
谢谢你的回答,第二个问题我有些懂了。 但是第一个问题我是想问,即然无法用new来实例化某类型,那么对于另一个对象又是怎样在其内部实例化这个无法用new实例化的类哪?
bdmh 2014-12-30
  • 打赏
  • 举报
回复
datatable初始化时创建的 this.columnCollection = new DataColumnCollection(this); DataColumnCollection初始化时,table就被传入了

internal DataColumnCollection(DataTable table)
{
    this._list = new ArrayList();
    this.defaultNameIndex = 1;
    this.columnsImplementingIChangeTracking = DataTable.zeroColumns;
    this.table = table;
    this.columnFromName = new Hashtable();
}

 

於黾 2014-12-30
  • 打赏
  • 举报
回复
1.扩展方法,当你用扩展方法去获取DataTable中的列集合,就会返回一个DataColumnCollection类型 2.DataColumn中的Table字段,表示它的父控件,也就是它是属于哪一个DataTable 搜一搜:属性 属性其实是个函数(get,set),它并不是一个变量,所以也不存在什么时候赋值.你什么时候去取值,就会调用函数去对应的地方取,取不到就是null呗

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧