You are on page 1of 6

GII THIU V GENERIC TRONG .NET 2.

0
07/11/2007 08:30 AM

Generic la mt tinh nng mi kha thu vi cua .net 2.0. Vy Generic la gi? s dung chung nh th nao? Tai bai vit nay chung ta se tra li nhng cu hoi o. Type Safety Cac ngn ng .net (C#, C++, VB..) u la nhng ngn ng c inh kiu manh, co nghia la ban phai khai bao bin ro rang trc khi s dung. Tuy nhin khi ta s dung cac kiu tp hp (collection) lai khng h tr kiu an toan( Type safety). Vi du kiu ArrayList, chung cho phep ta lu tr tt ca cac object bn trong chung. using System; using System.Collections; namespace TestApp { class Test { [STAThread] static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add(3);

list.Add(4); //list.Add(5.0); int total = 0; foreach(int val in list) { total = total + val; } Console.WriteLine( "Total is {0}", total); } } } Khi ta chay chng trinh trn se cho ta kt qua la 7. Nhng khi ta thm dong lnh list.Add(5.0); Chng trinh se thng bao li trong thi gian chay. Generic la gi? Generic cho phep chung ta inh kiu an toan (type safety). Chung cho phep ta tao ra mt cu truc d liu ma khng cn phai xac inh o la kiu d liu gi. Tuy nhin khi cu truc d liu nay c s dung, trinh bin dich phai am bao rng kiu d liu c s dung vi no la kiu an toan. Generic cung tng ng vi Template trong C++ tuy nhin vic s dung Generic trong .net d dang hn nhiu so vi Template.

List<int> aList = new List<int>(); aList.Add(3); aList.Add(4); // aList.Add(5.0); int total = 0; foreach(int val in aList) { total = total + val; } Console.WriteLine("Total is {0}", total); Ta se khng th thc hin ng dong lnh aList.Add(5.0). Trinh bin dich se thng bao li. Generic Class Di y ti xin gii thiu cach khai bao cung nh s dung cac lp Generic Kiu tham s Nhin chung Generic class chi la mt lp ma no tip nhn cac tham s. Chinh vi vy ma cac tham s cua Generic class chi la nhng loai tru tng ma no c s dung trong cu truc cua mt hay nhiu kiu xac inh trong thi gian chay. Thut ng nay lam ta lin tng n cac kiu tham s cua Generic Class co th ap ng nh mt PlaceHolders ma c thay th bi kiu d liu thc khi mt Generic class c xy dng.

public class Stack<T> { private T[] _items; private int _count; public void Push(T item) {...} public T Pop() {...} } Overload Type public class MyType { } public class MyType<T> { ... } public class MyType<T, U> { ... } Tha k public class MyBaseClass<U> { private U _parentData; public MyBaseClass() {} public MyBaseClass(U val) { this._parentData = val; } } public class MySubClass<T, U> : MyBaseClass<U> { private T _myData;

public MySubClass() {} public MySubClass(T val1, U val2) : base(val2) { this._myData = val1; } } Rng buc tham s Generic cho ta vit mt lp ma khng cn xac inh kiu d liu cu th, nhng vn cho phep ngi s dung lp o chi ra kiu d liu cu th se s dung. iu nay tao ra s linh hoat bng cach thay th mt s rng buc v kiu ma co th c s dung trong cac tham s public static T Max<T>(T op1, T op2) where T : IComparable { if (op1.CompareTo(op2) < 0) return op1; return op2; } Tong vi du ti a chi ra rng buc ma kiu c s dung cho kiu tham s phai thc thi giao din IComparable. Cac kiu rng buc co th s dung. where T : struct where T : class where T : new() ham khi tao khng tham s where T : class_name kiu lp ma tham s phai tha k where T : interface_name kiu giao din ma tham s phai thc thi.

Cung co th s dung kt hp nhiu rng buc nh where T : IComparable, new(). Kt thuc Trn y la nhng gii thiu c ban nht v Generic trong .net 2.0. Chuc bac ban thanh cng.

You might also like