2012年4月21日 天氣睛 天氣說變就變 昨天天還陰陰沉沉 大雨傾盆 今天太陽高照 明天又是什麼呢 不管了 坐在電腦旁 人都麻木了 今天有一朋友生日 正好出去轉轉 呼吸一下新鮮空氣。
泛型及泛型應用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace 泛型
{
class Program
{
static void Main(string[] args)
{
DataContians<int> dc = new DataContians<int>();
dc.Data = 2;
//dc.Data = "ss";
//普通類型轉換爲泛型
ArrayList list = new ArrayList();
list.Add(1);
list.Add(2);
list.Add(3);
IEnumerable<int> l = list.Cast<int>();//進行轉換
foreach (int i in l)
{
Console.WriteLine(i);
}
//調用泛型方法
Hello<int, string>(1, "sss");
//泛型委託 調用 泛型方法
Delegatestring<int,string> d = Hello<int, string>;
d(1,"aaa");
//泛型約束
//泛型對於泛型委託 泛型類 都是一樣的
createlist<Dog>(3);//泛型無參約束
personlist<person> p = new personlist<person>();//泛型繼承約束
personlist<chinese> p1 = new personlist<chinese>();
//泛型約束之應用 可空類型
int? nu = 3;//對於可空類型 系統會把他轉換爲Nullable<int> Nullable<T> int?編譯器會自動翻譯Nullable<int>
if (nu.HasValue)
{
Console.WriteLine(nu.Value);
}
//用代碼簡單實現一下 可空類型 具體代碼 往下看
MyNullable<int> nul = new MyNullable<int>();
nul.Hasvalue = true;
nul.value = 3;
//泛型應用之懶對象 Lazy<T> vs2010纔有的 爲了提高性能儘量減少內存佔用 一個對象沒使用之前 不創建 等到使用時再創建
person p2 = new person();
/*..一個對象在創建之後並沒調用他,等執行一段代碼之後再調用減少內存使用(理論上高性能)..*/
/*一段代碼執行*/
p2.Hello();
/*微軟的方法*/
//只有調用value時才調用類的構造函數
//只有在該類非常耗內存的情況下 去使用
//一般不使用
Lazy<person> p3=new Lazy<person>();//在這裏並沒有調用構造 函數 可以 調試 測試一下
/*一段代碼執行*/
p3.Value.Hello();//構造函數在此第一次調用 真的是懶對象
//用泛型實現Lazy<T>
MyLazy<person> p4 = new MyLazy<person>();
p4.value.Hello();//完美實現 代碼往下看 調試的時候 把上面的註釋 Lazy註釋悼
Console.Read();
}
//泛型方法
static void Hello<T,V>(T t,V v)
{
Console.WriteLine(v);
}
//public event EventHandler onshang;//泛型事件
//泛型約束之無參約束
static List<T> createlist<T>(int n) where T:new()//添加約束 約束爲泛型構造函數爲無參構造函數 好像只能約束無參的
{
List<T> list = new List<T>();
for (int i = 0; i < n; i++)
{
T t = new T();//如果不加約束,他就會出錯,因爲他不確定是否有無參構建函數
list.Add(t);
}
return list;
}
}
//泛型約束之繼承約束
class personlist<T> where T : person//T的類型只能是person類或person類的子類
{
}
public class DataContians<v>//約定一個特定類型
{
public v Data { get; set; }//所有用到類型的地方 可以用v代替
}
delegate void Delegatestring<T,T1>(T t,T1 t1);//泛型委託
class Dog
{
public Dog()
{
}
}
class person
{
// public int age;
public person()
{
Console.WriteLine("被構造 了");
}
public void Hello()
{
Console.WriteLine("Hello");
}
}
class chinese : person
{
}
class MyNullable<T> where T : struct
{
public bool Hasvalue{get;set;}
public T value { get; set; }
}
class MyLazy<T> where T:new()
{
private T instance;
public T value
{
get
{
if(instance==null)
{
instance=new T();
}
return instance;
}
}
}//default(T)返回一個類型的的默認值 ,一般在寫泛型的時候 有可能用到
}