2012-04-04 87 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

相關問題