2013年8月21日 星期三

SET GET 備忘

類別中 最簡單的SET GET
久沒用真的會忘 寫一下備查

class asshold //類
{
string uname = ""; //private 私用

public string Name //public公用
{
get { return uname; } //客戶要取值 會回傳uname 給客戶
set { uname = value; } //客戶要寫入value是值 會等於 uname

}
}  



 FrameWork3.5可用縮寫如下
public string test { get;set;}



下面是客戶端

class Program
{
   static void Main(string[] args)
   {
     asshold myclass = new asshold();
     asshold.Name = "call me brother"; //set
     Console.WriteLine(asshold.Name ); //get
     asshold.Name = "Silvia"; //set
     Console.Write(asshold.Name);  //get
   }
}



2013年8月19日 星期一

C#泛型的意義 (Generics)

本文出處
本文有稍微修改成自己看得懂的版本

Q:何謂泛型(Generics)?

A:在定義泛型類別時 不指定某些變數的具體類型
而是用一個類型參數代替,在使用這個類別時
這個類型的參數會由,一個具體的類型所代替


比較下面兩個例子。

範例一泛型是string

 namespace TestGenerics {
    class Program {
        static void Main(string[] args)
        {  //Record<string>  此時泛型類別中的T=string           
            Record<string> score1 = new Record<string>("Alex", "A");          
            Console.WriteLine("Alex " + score1.Getgrade());
            Console.ReadKey();
        }
    }//定義公開 泛行類別Record<T> T是尚未指定的類型
    public class Record<T>
    {
        private string _name;
        private T _grade;//T的類型還沒定義 但是定義後可以宣告物件
        public Record(string name, T grade)//想像T是一個類型比如是string
        {
            this._name = name;
            this._grade = grade;
        }
        public T Getgrade()//用泛型也可指定回傳的類型
        {
            return this._grade;
        }
    }
}


範例二 泛型變成int了

 namespace TestGenerics {
    class Program {
        static void Main(string[] args) {
            Record<int> score1 = new Record<int>("Alex", 80);          
            Console.WriteLine("Alex " + score1.Getgrade());
            Console.ReadKey();
        }
    }
    public class Record<T> {
        private string _name;
        private T _grade;
        public Record(string name, T grade) {
            this._name = name;
            this._grade = grade;
        }
        public T Getgrade() {
            return this._grade;
        }
    }
}

範例三
泛型類別可以支援一個以上的泛型變數,兩者型態一致。

public class Record<T> {
       private string _name;
       private T _math;
       private T _phy;
       public Record(string name,T math,T phy{
           this._name = name;
           this._math = math;
           this._phy = phy;
       }
       public T GetMath(){
           return this._math
       }
       public T GetPhy(){
           return this._phy;
       }
   }


範例四
兩者型態也可不一致,就要宣告兩個型態的關鍵字。
 public class Record<S, T>{
    private string _name;
    private T _math; 
    private S _phy;
   
    public Record(String name, S phy, T math) { 
        this._name = name;   
        this._math = math;  
        this._phy = phy; 
    }
    public T GetMath() {
        return this._math;
    }
    public S GetPhy()
    {
        return this._phy;
    }
}


若要在 Method 達到泛型的效果,又該如何做呢?參考以下:
class Program {      
        static void Main(string[] args) {
            Console.WriteLine(Show<string>("Hello!"));
            Console.ReadKey();
        }
        static T Show<T>(T t) {
            T Result = t;
            return Result;
        }
    }


泛型變成int code 如下



 class Program {      
        static void Main(string[] args) {
            Console.WriteLine(Show<int>(9999));
            Console.ReadKey();
        }
        static T Show<T>(T t) {
            T Result = t;
            return Result;
        }
    }