欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C#委托的深入分析

 更新時間:2013年04月26日 17:23:27   作者:  
本篇文章介紹了,基于C#委托的深入分析。需要的朋友參考下

1.委托的定義

委托可以看成是一種數(shù)據(jù)類型,可以用于定義變量能接受的值只能是一個方法。

委托簡單的示例:

復(fù)制代碼 代碼如下:

namespace DelegateDemo
 {
     class Program
     {
         public delegate int MathOptDelegate(int value1,int value2);
         public int add(int value1, int value2)
         {
             return value1 + value2;
         }

         static void Main(string[] args)
         {
             MathOptDelegate mod;
             Program p = new Program();
             mod =p.add;
             Console.WriteLine(mod(3,5));
             Console.ReadKey();
         }
     }
 }

利用委托的構(gòu)造函數(shù)創(chuàng)建委托
復(fù)制代碼 代碼如下:

namespace DelegateDemo
 {
     class Program
     {
         public delegate int MathOptDelegate(int value1,int value2);
         public int add(int value1, int value2)
         {
             return value1 + value2;
         }

         static void Main(string[] args)
         {

             Program p = new Program();
             MathOptDelegate mod = new MathOptDelegate(p.add);
             Console.WriteLine(mod(3,5));
             Console.ReadKey();
         }
     }
 }

從這個示例中可以得出這樣的直觀印象:

委托可以堪稱是一個方法的容器,將某一個具體的方法裝入后,就可以把它當(dāng)成方法一樣使用。

2.委托的調(diào)用列表

從上一個例子看,委托變量可以引用某一個方法,調(diào)用它就相當(dāng)于調(diào)用這個方法。

如果委托今年僅是方法調(diào)用的另一種形式,那何必多此一舉引入委托這一特性?直接調(diào)用方法不是更簡單明了?

因為委托變量不僅可以引用另一個方法,還可以組合多的方法并批量執(zhí)行它們。

復(fù)制代碼 代碼如下:

namespace DelegateDemo2
{
    class Program
    {
        public delegate void MyDelegate(String str);
        public static void hello(String str)
        {
            Console.WriteLine(str+"你好");
        }
        public static void goodbye(String str)
        {
            Console.WriteLine(str+"再見");
        }
        static void Main(string[] args)
        {
            MyDelegate a,b,c,d;
            a = Program.hello;
            a("a");
            b = Program.goodbye;
            b("b");
            c = a + b;//等價將兩個方法體合并
            c("c");// c你好 c再見
            d = c - a;
            d("d");//d再見
            Console.ReadKey();

           
        }
    }
}

像C這樣的委托變量可稱為多路委托變量。

可以用加法運算符來組合單個委托變量為多路委托變量。類似的,也可以使用減法運算符來從一個多路委托變量中移除某個委托變量。

復(fù)制代碼 代碼如下:

namespace DelegateDemo2
{
    class Program
    {
        public delegate void MyDelegate(String str);
        public static void hello(String str)
        {
            Console.WriteLine(str+"你好");
        }
        public static void goodbye(String str)
        {
            Console.WriteLine(str+"再見");
        }
        static void Main(string[] args)
        {
            MyDelegate a,b,c,d;
            a = Program.hello;
            a("a");
            b = Program.goodbye;
            b("b");
            c = a + b;//等價將兩個方法體合并
            c("c");// c你好 c再見
            d = c - a;
            d("d");//d再見
            Delegate[] ds;
            ds = c.GetInvocationList();
            foreach(Delegate s in ds)
            {
                Console.WriteLine(s);
                //DelegateDemo2.Program+MyDelegate
                //DelegateDemo2.Program+MyDelegate
            }
            Console.WriteLine(ds.Length);
            Console.ReadKey();

           
        }
    }
}

如果委托定義的方法有返回值,則多路委托變量的返回值為委托調(diào)用列表中最后一個方法的返回值,中間調(diào)用的方法返回值會被丟棄。

使用泛型委托:

 Func系列委托

以下是Func熄了委托的定義,依其泛型類型參數(shù)的多少有多個重載形式:

public delegate TResult Func<Tresult>();

public delegate TResult Func<T,Tresult>();

 

相關(guān)文章

  • ListView Adapter優(yōu)化 實例

    ListView Adapter優(yōu)化 實例

    ListView Adapter優(yōu)化 實例,需要的朋友可以參考一下
    2013-04-04
  • C#表達式目錄樹示例詳解

    C#表達式目錄樹示例詳解

    這篇文章主要給大家介紹了關(guān)于C#表達式目錄樹的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C#中如何使用Winform實現(xiàn)炫酷的透明動畫界面

    C#中如何使用Winform實現(xiàn)炫酷的透明動畫界面

    這篇文章講解了如何使用Winform實現(xiàn)炫酷的透明動畫界面,Winform相對于Wpf使用更簡單一些,系統(tǒng)要求更低,需要了解的朋友可以參考下
    2015-07-07
  • 在.net應(yīng)用程序中運行其它EXE文件的方法

    在.net應(yīng)用程序中運行其它EXE文件的方法

    這篇文章主要介紹了在.net應(yīng)用程序中運行其它EXE文件的方法,涉及C#進程操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 詳解C# TimeSpan 計算時間差(時間間隔)

    詳解C# TimeSpan 計算時間差(時間間隔)

    本篇文章主要介紹了C# TimeSpan 計算時間差(時間間隔),非常具有實用價值,需要的朋友可以參考下。
    2016-12-12
  • C#中List和數(shù)組之間轉(zhuǎn)換的方法

    C#中List和數(shù)組之間轉(zhuǎn)換的方法

    這篇文章主要介紹了C#中List和數(shù)組之間轉(zhuǎn)換的方法,涉及比較簡單的轉(zhuǎn)換技巧,需要的朋友可以參考下
    2015-02-02
  • C#多種操作excel的方法比較

    C#多種操作excel的方法比較

    本文詳細講解了C#多種操作excel的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#中GridView動態(tài)添加列的實現(xiàn)方法

    C#中GridView動態(tài)添加列的實現(xiàn)方法

    這篇文章主要介紹了C#中GridView動態(tài)添加列的實現(xiàn)方法,涉及C#中GridView的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#實現(xiàn)將json轉(zhuǎn)換為DataTable的方法

    C#實現(xiàn)將json轉(zhuǎn)換為DataTable的方法

    這篇文章主要介紹了C#實現(xiàn)將json轉(zhuǎn)換為DataTable的方法,涉及C#操作json及DataTable的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • C#基本語法簡介

    C#基本語法簡介

    本文詳細講解了C#的基本語法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評論