2012-04-04 88 views
3

如果DataRow类的构造函数是受保护的内部函数并且DataTable不从DataRow继承,DataTable如何使用NewRow方法创建DataRow的新实例?DataRow和受保护的内部构造函数

实施例:

class Program 
{ 
    static void Main() 
    { 
     // error: inaccessible due to its protection level 
     DataRow dr = new DataRow(); 

     // works 
     DataRow dr = new DataTable().NewRow(); 
    } 
} 

回答

2

protected internal是指“由派生类访问”和“其他类在同一组件可访问的”。 DataTableDataRow在同一个程序集中,因此DataTable可以访问DataRow的所有内部成员。

+0

保护内部部件的数组大小“的衍生访问类在相同的程序集中“,但DataTable不是从DataRow派生的。 – Snake 2012-04-04 21:24:01

+0

不,受保护的内部意味着我说的意思。请参阅http://msdn.microsoft.com/en-us/library/ms173121(v=vs.100).aspx – hvd 2012-04-04 21:27:15

+0

我的错误,谢谢! – Snake 2012-04-04 22:07:32

0

希望你已经得到了这个答案。

但是我仍然在回答这个问题,以解决“为什么要这样设计”。

由于“hvd”提到了它们在同一个程序集中,这就是DataTable能够创建DataRow实例的原因。

这样做的原因的做法是:

•数据行包含值对于每一列 •理想地用于在内部存储这些值的阵列

•因此,每个数据行包含数组,它包含值

•但数据行不会知道数组的大小来初始化

•取决于数量在数据表中的列

•但数据表知道如何在表格

•这么多列就是为什么它需要负责创建或设置的DataRow

相关问题