• Khái niệm
− Generic là 1 phGeneric là 1 phầần trong hn trong hệệ ththốống king kiểểu cu củủa NETa .NET
Framework cho phép định kiểu mà không quan tâm nhiều đến các chi tiết bên trong.
ấ ề
− .NET Framework cung cấp nhiều generic class trong namespace System.Collections.Generic
• HoHoạạtt độđộng nhng nhưư nhnhữững lng lớớp khácp khác
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Generic
• Các khai báo Generic
− Tạo kiểu Generic Kiểu T và U sẽ được xác định khi sử dụng Tạo kiểu Generic class Obj{ public Object t; class Gen<T,U>{ public T t; public Object t; public Object u;
public Obj(Object _t,Object _u){
public T t; public U u;
public Gen(T _t,U _u){ t=_t; u=_u; } t=_t; u=_u; } Kiểu thông thường Kiểu generic } } } } thường
• Các khai báo Generic
− SSửử ddụụng king kiểểu Genericu Generic
• Chỉ định kiểu của kiểu generic sử dụng
Obj oa=new Obj(“Hello”,”World!”);j j( , ); Obj oa=new Obj(10.125,1000); Console.WriteLine((string)oa.t+ (string)oa.u); Gen<string,string> ga=new j j( , ); Console.WriteLine((double)oa.t+ (int)oa.u); Gen<double,double> ga=new Gen string,string ga new
Gen<string,string>
(“Hello”,”world!”);
Console.WriteLine(ga.t+ga.u);
Gen double,double ga new
Gen<double,int> (10.125,1000);
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Generic
• Các khai báo Generic
G <i t i t>
Gen<int,int> gc=new
Gen<int,int>(10.125,1000); Console.WriteLine(ga.t+ga.u);
Compile ERROR
Obj oa=new Obj(10.125,1000);
Console.WriteLine((int)oa.t+ Runtime ERROR
• Các khai báo Generic
− Generic cGeneric cũũng có ging có giớới hi hạạn khi ta xây dn khi ta xây dựựng lng lớớp hp hỗỗ trtrợợ ttấấtt cả các kiểu dữ liệu
• Giới hạn tương tự lớp Object
Giải há kh i bá á à b ộ i đị h á kiể
− Giải pháp: khai báo các ràng buộc, qui định các kiểu có thể dùng với generic.
− Các ràng bug ộộc mà generic hg ỗ trợợ
• Interface
• Base class
• Constructor
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM
TRUNG TÂM TIN HỌC
Generic
• Các khai báo Generic
• Các khai báo Generic
class CompGen<T> where T : IComparable{ public T t1; CompGen<int> a = new CompGen<int>(10, 20); public T t2; public CompGen(T _t1,T _t2){ t1=_t1;t2=_t2; Console.WriteLine(a.Max()); } public T Max(){ if (t2.CompareTo(t1)<0) ể (t Co pa e o(t ) 0) return t1; return t2; } Compile error : kiểu generic T không định nghĩa phương thức CompareTo } } CompareTo
• Khái niệm