c# 委託小姐

來源:互聯網
上載者:User

標籤:style   blog   color   使用   width   io   

  委託在c# 1 時代產生出來的時候,估計無人可以預想到會對C#語言產生如此大的影響。c#1 要建立委託執行個體。必須指定委託的類型和操作。

  •  聲明委託  public delegate bool CompareHandler(int x,int y);
  • 操作方法:
    public bool CompareData(int x,int y){   return x>y;}

     

  • 綁定  CompareHandler handler = new CompareHandler(CompareData);
  • 構建鏈式委託採用  Delegate.Combine(handler,...) , Delegate.Remove();

c# 2.0 時代加入了文法糖 += ,-=構建鏈式委託.同時支援委託的協變與逆變。

 

方法群組轉換:

      方法組就是重載方法。方法組可以隱式轉換為相容的委託。

  public delegate void EventHandler(object o,EventArgs e);       public TestMethod(){}      public TestMethod(object o,EventArgs e){}     EventHandler h=TestMethod;

不過 方法組不能隱式的轉換Delegate,  顯示轉換如下 

Delegate  d = (EventHandler)TestMethod

並且對於已經重載轉換委託類型的方法,就不能把它作為方法參數使用,下面的 就會出現錯 參數 1: 無法從“方法組”轉換為“System.Delegate” 

 public delegate void EventHandler(object o, EventArgs e);        public static void TestMehod(object o, EventArgs e)        {        }        public static void TestMethodt(Delegate d)        {        }            TestMethodt(TestMehod);

採用強制轉型  TestMethodt((EventHandler)TestMehod);

 

委託匿名方法轉換

    匿名方法轉換 在ECMA 344 13.5

         1.無傳回型別參數匹配 

            Action<int> s = delegate{ };
            Action<int> a = delegate(int x) { };

 

        3.匿名方法閉包: 

      閉包 抓取的是就是變數本身。如下的兩種情況。對於counter來說List中抓的都是新的執行個體。對於i所有的list都是同一個變數

 List<Action> lst = new List<Action>();            for (int i=0;i<3;++i)            {                int counter = i*10;                lst.Add(delegate                {                    Console.WriteLine("values is "+i);                    i++;                });            }            foreach (var  t in lst)            {                t();            }            lst[0]();            lst[0]();            lst[2]();            lst[2]();       

 

  List<Action> lst = new List<Action>();            for (int i=0;i<3;++i)            {                int counter = i*10;                lst.Add(delegate                {                    Console.WriteLine("values is " + counter);                    counter++;                });            }            foreach (var  t in lst)            {                t();            }            lst[0]();            lst[0]();            lst[2]();            lst[2]();
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.