C#語法學習泛型(gereric)


/*
 * Created by SharpDevelop.
 * User: Administrator
 * Date: 2008/9/4
 * Time: 上午 10:40
 * 泛型(gereric)
 
*/
 
using System;
 
class Stack
 {
     
private int[] items;
     
private int count;
     
public Stack(int size)
     {
         items
=new int[size];
         count
=0;
     }
     
public void Push(int x)
     {
         items[count
++]=x;//這時是先賦值再進行自加運算
     }
     
public int Pop()
     {
         
return items[--count];//先自減再返回值
     }
 }
class Test
{
    
static void Main()
    {
        Stack s
=new Stack(10);
        s.Push(
111);//先壓入111
        s.Push(222);//再壓入222
        Console.WriteLine(s.Pop().ToString());
        Console.WriteLine(s.Pop().ToString());
        
/*
         * 輸出結果為
         * 222
         * 111
         * 這個程序演示了棧(Stack)的先進後出的原理
         
*/
    }
}

/*
 * Created by SharpDevelop.
 * User: Administrator
 * Date: 2008/9/4
 * Time: 上午 10:40
 * 泛型(gereric)
 * 現在需要改變我們希望可以傳入float類型的數據
 * 因此我們使用了弱類型的object,這時候我們傳入
 * 的參數就可以是整行和其它類型的數據.
 * 
 * 因為需要經過四次裝箱和拆箱操作,性能也就不是很好.
 * 當然是說大量的數據情況下
 
*/
 
using System;
 
class Stack
 {
     
private object[] items;
     
private int count;
     
public Stack(int size)
     {
         items
=new object[size];
         count
=0;
     }
     
public void Push(object x)
     {
         items[count
++]=x;//這時是先賦值再進行自加運算
     }
     
public object Pop()
     {
         
return items[--count];//先自減再返回值
     }
 }
class Test
{
    
static void Main()
    {
        Stack s
=new Stack(10);
        s.Push(
111.1);//裝箱
        s.Push(222.2);//裝箱
        Console.WriteLine((double)s.Pop()+(double)s.Pop());//兩次折箱

    }
}

/*
 * Created by SharpDevelop.
 * User: Administrator
 * Date: 2008/9/4
 * Time: 上午 11:01
 * 泛型(gereric)
 * 解決了性能上的問題,同時寫程序也會覺的更方便
 * 它引進行了一個類型參數
 
*/
using System;
 
class Stack<T>//聲明泛型
 {
     
private T[] items;
     
private int count;
     
public Stack(int size)
     {
         items
=new T[size];
         count
=0;
     }
     
public void Push(T x)
     {
         items[count
++]=x;//這時是先賦值再進行自加運算
     }
     
public T Pop()
     {
         
return items[--count];//先自減再返回值
     }
 }
class Test
{
    
static void Main()
    {
        Stack
<int> s=new Stack<int>(10);
        s.Push(
111);
        s.Push(
222);
        Console.WriteLine(s.Pop()
+s.Pop());

    }
}
/*上面使用了泛型,這樣提高了程序的性能,不再需要進行裝箱和拆箱的動作
 * 
 * 如果我們現在需要使用小數只需要把泛型的類型參數改為double就可以了.
 * 
 * 
 * 
*/

/*
 * Created by SharpDevelop.
 * User: Administrator
 * Date: 2008/9/5
 * Time: 上午 11:32
 * 兩個泛型參數的例子,通常用<T,S>
 
*/
using System;
public class Stu<T,S>
{
    
private T name;
    
private S age;
    
public Stu(T Name,S Age)
    {
        
this.name=Name;
        
this.age=Age;
    }
    
public void Show()
    {
        Console.WriteLine(
"姓名是:{0},年齡:{1}",name,age);
    }
}
class Test
{
    
static void Main()
    {
        Stu
<string,int> t=new Stu<string,int>("Athrun",26);
        t.Show();
    }
}
posted @ 2008-09-04 11:13  Athrun  阅读(375)  评论(0编辑  收藏  举报