C# 進階特性

來源:互聯網
上載者:User

其實C#的進階特性,我覺得不能叫做進階特性

我覺得吧,C#的基本文法如果是必須要掌握的話

那麼這個所謂的進階特性其實也就是所謂的

C#這門語言的特色之處,它和其他語言的區別所在的地方

不能叫做進階特性,按照我的想法,這個才應該算是真正的C#語言

之前的那些只能是編程基礎而已

一開始就被這個“進階特性”這四個字嚇到了,以至於我跳過這個所謂的進階特性往下看

然後鼓起勇氣看這個“進階特性”的時候,才發現,根本也不進階到哪裡去嘛

 

C#語言有四個精髓之處,其實也就三個,再化簡下來,其實也就兩個

1.泛型

2.泛型集合

3.委託

4.事件

 

 

泛型  說來也簡單,其實也就是  模板 

例子: 求數在數組中的位置 (泛型版本)  

 

static void Main()

{     int[] nums = { 12, 21, 31, 90, 102 };

       int i = index(nums,90);

       string[] words = { "sg","vnd"};

       i = index(words , "sg");

}

static int index<T> (T[] a ,T value )

{

    for(int i = 0; i < a.lenght ;  i++)

    {

      if (a[i].Equals(value))

      return i;

    }

    return -1;

}

 

 

可以看出,泛型其實也就是模板在C # 中的叫法而已,實現的時候只需要加一個 <T> 就可以使用泛型了

這個比之前在C/C++版本中,方便了不少

 

泛型集合,所謂集合其實就是相同類型的一組泛型,其實也可以叫做容器,因為它的英文是collection

泛型集合的目的就是對一組相同類型的對象進行儲存並操作

 

泛型列表  —— List <T> 可增長的動態模板數組  ,通過泛型列表來添加對象

在泛型列表中,其實也可以叫做泛型類表,這個List <T>其實就是一個類

 

這裡類裡,

屬性:

Capacity : 設定當前最大容量

Count :    當前列表中元素個數

方法:

public void Add(T item); 添加列表元素到列表末尾

public void Sort();  排序

public int IndexOf(T item);插入

public bool Remove(T item);刪除

 

方法還有重載的不同版本

下面是從cen123搜羅來的代碼,我覺得他說得很好,要是想進一步瞭解的話,我覺得不防去看看他那篇文章

 

-----------------------------分割線-----------------------------------

怎樣建立泛型集合?
主要利用System.Collections.Generic命名空間下面的List泛型類建立集合,文法如下:

  List<T> ListOfT = new List<T>();
其中的"T"就是所要使用的類型,既可以是簡單類型,如string、int,也可以是使用者自訂類型。下面看一個具體例子。

定義Person類如下:
class Person
{
private string _name; //姓名
private int _age; //年齡

//建立Person對象
public Person(string Name, int Age)
{
this._name= Name;
this._age = Age;
}

//姓名
public string Name
{
get { return _name; }
}

//年齡
public int Age
{
get { return _age; }
}
}

//建立Person對象
Person p1 = new Person("張三", 30);
Person p2 = new Person("李四", 20);
Person p3 = new Person("王五", 50);

//建立類型為Person的對象集合
List<Person> persons = new List<Person>();

//將Person對象放入集合
persons.Add(p1);
persons.Add(p2);
persons.Add(p3);

//輸出第2個人的姓名
Console.Write(persons[1].Name);
  可以看到,泛型集合大大簡化了集合的實現代碼,通過它,可以輕鬆建立指定類型的集合。非但如此,泛型集合還提供了更加強大的功能,下面看看其中的排序及搜尋。

  泛型集合的排序
  排序基於比較,要排序,首先要比較。比如有兩個數1、2,要對他們排序,首先就要比較這兩個數,根據比較結果來排序。如果要比較的是對象,情況就要複雜一點,比如對Person對象進行比較,則既可以按姓名進行比較,也可以按年齡進行比較,這就需要確定比較規則。一個對象可以有多個比較規則,但只能有一個預設規則,預設規則放在定義該對象的類中。預設比較規則在CompareTo方法中定義,該方法屬於IComparable<T>泛型介面。請看下面的代碼:
class Person :IComparable<Person>
{
//按年齡比較
public int CompareTo(Person p)
{
return this.Age - p.Age;
}
}

  CompareTo方法的參數為要與之進行比較的另一個同類型對象,傳回值為int類型,如果傳回值大於0,表示第一個對象大於第二個對象,如果傳回值小於0,表示第一個對象小於第二個對象,如果返回0,則兩個對象相等。

定義好預設比較規則後,就可以通過不帶參數的Sort方法對集合進行排序,如下所示:

//按照預設規則對集合進行排序
persons.Sort();

//輸出所有人姓名
foreach (Person p in persons)
{
Console.WriteLine(p.Name); //輸出次序為"李四"、"張三"、"王五"
}

-----------------------------------------------------------------------

 

 

 下面來講一講委託  ,委託是一個類型,它用來封裝方法 目的是,實現把方法作為一個參數來傳遞

委託是從system.Delegate類派生的類

 //聲明委託: 和聲明方法類似,但是多一個delegate關鍵字

如: 

   在class Program外層定義委託
    delegate void Delegateone();
    delegate double Delegatetwo(double r,double t);

  在program內部寫出與Main()並排的函數

 

 static double add(double a, double b)
        {

            return a + b;
        }

      
        static void printStar()
        {
            for (int i = 0; i < 5; i++)
            { System.Console.WriteLine("***************"); }
        }

        static void printLine()
        {
            for (int i = 0; i < 5; i++)
            { System.Console.WriteLine("----------------"); }
        }

 

 

在Main函數中使用委託

 

 

 

 

  //注意:委託傳遞的是ta的名稱,而不是ta的調用,千萬不能加括弧

 //委託裡面放的是方法的地址,調用委託就是依次調用委託中方法的地址
          
            Delegateone di = new Delegateone(printStar);

            di();//調用委託,相當於 printStar
            //+= 也是傳遞的名稱,而不是方法的調用

            di += printLine;

            di();//調用委託,相當於 printStar, printLine

            double a = 0.2;
            double b = 0.3;
            double r;
            Delegatetwo d2 = new Delegatetwo(add);

            r = d2(a,b);  //委託 調用 含有參數的方法

其實委託的作用就是,更方便的調用方法,或者說是依次調用方法,或者是,把同一個方法調用多次

但是,據說委託的真正意義不僅僅是這樣,而是配合著事件來使用的。

那麼,下面就介紹什麼是事件

事件是在委託的基礎上,記住,是在委託的基礎上

事件具有不確定性發生的函數

例如: 按鈕有一個單擊的事件,什麼時候發生這個事件軟體不知道,但是,事件發生了之後軟體就依次執行事件裡面的方法

//聲明事件的文法

public event  委託類型   事件名稱;

 

  /*
         * 事件
         * 例: 體重改變事件
         * 建立一個woman類,有名稱,年齡,體重三個屬性
         * 體重發生變化時,出發事件getFatter/getThinner
         * 訂閱事件 用+=
         */

        delegate void WeightChange(double newWeight);

        class woman
        {
            public string Name { set; get; }
            public int Age { get; set; }
            //public double Weight { get; set; }

            private double w;

            //定義了兩個事件,分別在當人的體重變輕和變重的時候出發這個事件
            public double Weight
            {
                get { return w; }
                set
                {
                    if (w < value)
                    {
                        if (getFatter != null)
                            getFatter(value);
                       
                    }
                    else if (w > value)
                    {
                        if (getFatter != null)
                            getThinner(value);

                    }
                    w = value;

                }
            }

            public event WeightChange getFatter;
            public event WeightChange getThinner;

          

        }

 

//定義函數

 

static void girl_getThinner(double newWeight)
        {
            System.Console.WriteLine("你變瘦了,現在的體重是{0}",newWeight);
            System.Console.ReadLine();
        }

        static void girl_getFatter(double newWeight)
        {
            System.Console.WriteLine("你變胖了,現在的體重是{0}", newWeight);
            System.Console.ReadLine();
        }

 

 //主函數

 

    woman girl = new woman();
            //事件處理常式
            girl.getThinner += new WeightChange(girl_getThinner);
            girl.getFatter += new WeightChange(girl_getFatter);
           
            girl.Weight = 60;
            //隨機數字
            Random r = new Random();

            for (int i = 0; i < 5; i++ )
            {
                girl.Weight = r.Next(45, 65);
            }

 

 

 

大致就是這麼多了,今天累了,就這樣吧。

第一次學,不好的地方,請指正!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.