3

如果 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();
    }
}
4

2 回答 2

2

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

于 2012-04-04T21:18:14.360 回答
0

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

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

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

采用这种方法的原因是:

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

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

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

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

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

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

于 2013-08-14T07:07:35.773 回答