初学dotNet编程,遇到问题各种,最近在研究DataTable等遇到DataRow实例化的问题,很自然的这样实例化一个DataRow:

[csharp]DataTable dt = new DataTable();

dt.Column.Add("C1");
dt.Column.Add("C2");

DataRow dr = dt.NewRow();
[/csharp]

于是出现下面的错误:

“System.Data.DataRow.DataRow(System.Data.DataRowBuilder)”不可访问,因为它受保护级别限制。

转到定义,会发现在DataRow 类的声明的地方用了protected关键字。他是一个受保护的internal类。internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。

MS这么做是有他的隐含意思在里面的:

一、一个table和他对应的row应该是有相同结构的,为了保证他们结构相同,就必须按照一个统一标准来规范他们.要么用table来规范row,那么让row去格式化table,ms选择了前一种方式,这里他们又隐含一层意思,那就是生成的顺序,table比row先生成.

所以为了严格保证这种规范和生成顺序,该构造函数就限制成了protected internal ,ok了,这么做,你就是想把table和row结构不对应都不成了,因为他没有留给你任何犯错的机会

二、从上面的构造函数可以看出,实际上row结构的创建是DataRowBuilder类负责的,而不是datarow类,datarow类实际负责对row的操作而不是创建。

注:部分内容转自网络

发表评论

/ 快捷键:Ctrl+Enter
加载中……