公開先:http://blogs.users.gr.jp/naka/articles/2267.aspx
C#2.0詳説シリーズはhttp://msdn.microsoft.com/vcsharp/team/language/のファイルを見ながら解説します。
開発中のVisualStudio2005の画面も出しながら解説していきます。
今度VisualStudio2005でC#の改定が行われます。その改定の内容は主に以下の4つ
- Generics
- Anonymous methods
- Iterators
- PartialType
Genericsとは大雑把に言うとobjectを引数にとるArrayList等をImage専用ArrayListにしたりすることができるものといえます。いままで何が入っても良いクラスとなると
Public class Stack
{
objrct[] items;
int count;
public void Push(object item){...}
public object Pop(){...}
}
この場合でPopメソッドを利用して取り出す場合にobject型が帰ってきます。 object型のままでは利用できませんから必然的にキャストして利用することになります。
Stack stack = new Stack()
stack.Push(3);
int x = (int)stack.pop();
キャストしているということは、全然違うキャストをすることすら可能ということです。
Stack stack = new Stack()
stack.Push("Hello .NetFramework1.1");
int x = (int)stack.pop();
これもコンパイルはとおります。なぜなら取り出した値がintに変換可能かどうかはわからないからです。
そこで登場するのがGenericsです。
このGenericsコンパイル時に型を決め打ちすることができるのです。
Stack<int> stack = new Stack<int>()
stack.Push(3);
int x = (int)stack.pop();
Stack<int> stack = new Stack<int>()
stack.Push("Hello .NetFramework2.0"); //コンパイルエラー
int x = (int)stack.pop();
すべてがGenericsできるわけではありません。上記のStackクラスを実際に作るとどうなるかを見ていきましょう。