通過繼承蛀序,子類擁有父類的一切行為和屬性;
任何父類出現(xiàn)的地方挂捻,都可以用子類來替代碉纺。
object是所有類型的父類;
延遲思想
- 推遲一切可以推遲的刻撒;
- 泛型就是用的一種延遲的思想骨田;
- 延遲到使用的時(shí)候才知道具體的類型;
- 方法聲明的時(shí)候沒有指定參數(shù)類型声怔,而是推遲到使用方法的時(shí)候才指定參數(shù)類型
聲明
ShowT<T>(T tParameter)
T态贤,占位符,可以隨便寫醋火,通常使用單個(gè)字母抵卫;
T tParameter T類型的參數(shù)
調(diào)用
ShowT<DateTime>(dtParameter);
ShowT<People>(people);
ShowT<string>("hello");
泛型的參數(shù)個(gè)數(shù)可以隨便定義
static void Show<T,S,W>(T t,S s,W w,int iParameter,string sParameter)ShowT("hello")
調(diào)用的時(shí)候狮荔,可以不傳類型參數(shù),可以自動(dòng)推算
為什么要有泛型
- 泛型實(shí)際上是語(yǔ)法糖介粘,有編譯器提供的功能殖氏,調(diào)用泛型的時(shí)候會(huì)為調(diào)用方 生成相應(yīng)的副本。
- 泛型方法姻采,泛型接口雅采,泛型類,在之后的學(xué)習(xí)中慨亲,泛型無處不在婚瓜,非常的重要;
- 因?yàn)榉盒褪腔谠挤椒▉硎褂茫ㄓ删幾g器來轉(zhuǎn)換)刑棵,不像object需要裝箱和拆箱巴刻,沒有性能損失。
- 解決了把多個(gè)參數(shù)傳到1個(gè)參數(shù)蛉签。
深入了解泛型
一個(gè)方法可以支持不同類型的參數(shù)
- 泛型方法之泛型返回胡陪,泛型不僅可以作為參數(shù),還可以作為返回值類型
public static T Get<T>(int id)
- 泛型類
public class SomeGeneriClass<W,S,T,TI>{}
- 泛型接口
public interface GenericInterface<T,S,s>{}
- 泛型委托
public delegate GetDelegate<T>();
- 泛型的約束
public static T Get<T>(T t) where T: class
{return default(T);}
- 泛型約束聲明后碍舍,類型參數(shù)必須滿足約束
- 引用類型
where T:class
- 值類型
where T:struct
- 無參構(gòu)造 new()
public static T Get<T>(T t) where T: class,new()
{
T ttt = new T();
return null;
//return default(T);
}
- 最實(shí)用的約束
public static void SayHi<T>(T t) where T : people
{
Console.WriteLine("ID={0},Name={1}",t.id,t.name);
//t必須是people類型或者people的子類
}