名前空間
アプリケーションや大きな機能単位で付けられる名前です。オリジナルアプリケーションを作成すれば、その名前で名前空間が作成されます。また、グラフィック処理などの大きな機能分類にも名前空間が作成されます。これにより、同名のクラスが存在しても名前空間で区別することができます。名前空間が重複すると、それに含まれるクラスも重複しますので、名前空間は重複しないように配慮する必要があります。
通常、よく使用する名前空間はディレクティブを使用して、名前空間の記述を省略できます。
- C# : using
- VB.NET : imports
- C++/CLI : using namespace
コレクション
簡単に言うと、可変長の配列を考えることができます。ArrayList などがあります。ArrayList は Object 型で値を格納する時には、格納時の型で格納できますが、取り出すときにはオブジェクト型になります。そのため、取り出し時にキャストが必要になります。プログラミングミスが出やすい所です。
ジェネリクス
.NET Framework 2.0 から追加された機能です。ジェネリクスでは型パラメーターによって型を指定する機能です。例えば、コレクションの ArrayList をジェネリクス対応コレクションにしたものが List です。型パラメータはー <型> のように指定します。
また、ジェネリクス対応のクラスやメソッドを作成することもできます。これまではメソッドの引数としては、値を渡すだけでしたが、ジェネリクスを使用すると型までも渡すことができます。
LINQ (Language Integrated Query)
.NET Framework 3.5 が追加された機能です。データベース、配列、コレクション、XML など複数のデータ形式に対して統一的な手法でアクセスするテクノロジーです。LINQ には次のようなプロバイダが存在します。
- LINQ to Objects
- LINQ to Entities
- LINQ to Datasets
- LINQ to SQL
- LINQ to XML
しかし、データベースアクセスの場合は、LINQ を使用すると、SQL とコードが混在することになります。これまでは、ストアドプロシージャを使って、SQL 部分を分離することがよいとされてきました。この点には逆行します。また、LINQ を使用した場合のパフォーマンスも問題になります。従って、データベースに関しては実際に使用するかの判断は注意する必要があります。
LINQ には次のような標準クエリー演算子があります。
- from : データソースが取得した 1 レコード分のデータを設定
- in : データソースを指定
- where : 抽出条件を指定
- select : 抽出列を指定
LINQ には、ふたつの書き方があります。
- クエリー構文 (標準クエリー演算子を SQL のように使う方法)
・ コンパイル時にメソッド構文に変換されます。
・クエリー構文では使用できない標準クエリー演算子がありますので、クエリー構文は完ぺきではありません。 - メソッド構文 (標準クエリー演算子をメソッドを使う方法)
・ラムダ式を引数とする拡張メソッドで構成されています。
O/R マッピング (Object Relational Mapping)
データベースから取得したデータをクラスに対応付けすることです。これにより、.NET 言語のオブジェクト指向でデータベースを操作できます。これによりデータベースの表や列名などでもインテリセンスが機能するため、プログラミングがしやすくなります。これはコードを記述する時点で、SQL の構文がチェックされることを意味しています。ここで使用されるバックグラウンドのテクノロジーには、LINQ to Entities や Entity Framework (Entitiy Data Model) があります。
IEnumerable インターフェース
列挙可能な型を表すインターフェースです。LINQ でアクセス可能なオブジェクトは IEnumerable インターフェースを実装している必要があります。配列とコレクションは IEnumerable インターフェースを実装していますので、LINQ によるアクセスが可能です。
匿名データ型
宣言時には明示的な型を指定せず、変数を作成します。但し、実際に値が格納される時には、データ型が決定され、以降違う型のデータを代入することはできません。それならば、宣言時に明示的に型を指定すればよいと考えられます。これは古くから言われていたことです。Variant などの何でも代入できる型は使用せず、明示的な型で宣言された変数を使うようにと。匿名データ型は Variant 型ではありません。ではなぜ、匿名データ型が必要なのかというと、LINQ での戻り値の場合、LINQ 実行後の結果が不明であることがあります。そのため、匿名データ型が役に立ちます。