DataRow和受保护的内部构造函数

时间:2012-04-04 17:59:30

标签: c# .net constructor datatable datarow

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

示例:

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

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

2 个答案:

答案 0 :(得分:2)

protected internal表示“可以通过派生类访问”和“可由同一程序集中的其他类访问”。 DataTableDataRow位于同一个程序集中,因此DataTable可以访问所有DataRow的内部成员。

答案 1 :(得分:0)

希望你已经得到了答案。

但我仍然在添加我的答案来解决“为什么它是以这种方式设计的”。

正如“hvd”所提及的,它们处于相同的程序集中,这就是DataTable能够创建DataRow实例的原因。

这种方法的原因是:

•数据行包含每列的值 •理想情况下,内部用于存储这些值的数组

•因此每个数据行都包含包含值

的数组

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

•这取决于数据表中的列数

•但数据表知道表中有多少列

•这就是为什么它需要负责创建OR设置DataRow的数组大小