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「派生クラスからアクセス可能」および「同じアセンブリ内の他のクラスからアクセス可能」を意味します。DataTableDataRowは同じアセンブリにあるため、のすべての内部メンバーDataTableにアクセスできます。DataRow

于 2012-04-04T21:18:14.360 に答える
0

これに対する答えがすでに得られていることを願っています。

それでも、「なぜこのように設計されているのか」に対処するために、これに私の答えを追加しています。

「hvd」が述べたように、それらは同じアセンブリにあるため、DataTable は DataRow のインスタンスを作成できます。

このアプローチの理由は次のとおりです。

• データ行には各列の値が含まれます • 理想的には、これらの値を格納するために内部的に使用される配列

• したがって、各データ行には、値を含む配列が含まれます

• しかし、データ行は、初期化する配列のサイズを認識していません。

• データ テーブルの列数に依存する

• ただし、データ テーブルはテーブル内の列数を認識しています

• そのため、DataRow の配列サイズを作成または設定する責任があります。

于 2013-08-14T07:07:35.773 に答える