如果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();
}
}
答案 0 :(得分:2)
protected internal
表示“可以通过派生类访问”和“可由同一程序集中的其他类访问”。 DataTable
和DataRow
位于同一个程序集中,因此DataTable
可以访问所有DataRow
的内部成员。
答案 1 :(得分:0)
希望你已经得到了答案。
但我仍然在添加我的答案来解决“为什么它是以这种方式设计的”。
正如“hvd”所提及的,它们处于相同的程序集中,这就是DataTable能够创建DataRow实例的原因。
这种方法的原因是:
•数据行包含每列的值 •理想情况下,内部用于存储这些值的数组
•因此每个数据行都包含包含值
的数组•但数据行不知道要初始化的数组的大小
•这取决于数据表中的列数
•但数据表知道表中有多少列
•这就是为什么它需要负责创建OR设置DataRow的数组大小