程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#中的拜托引見

C#中的拜托引見

編輯:C#入門知識

C#中的拜托引見。本站提示廣大學習愛好者:(C#中的拜托引見)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中的拜托引見正文


甚麼是拜托?

之前寫了事宜的引見:http://www.jb51.net/article/59461.htm

這裡也把拜托相干常識也總結一下。

拜托是c#中類型平安的,可以定閱一個或多個具有雷同簽名辦法的函數指針

聲明拜托的方法:delegate 前往值類型 拜托類型名(參數)

好比:

delegate void StringProcess(string s);

留意:這裡的除後面的delegate,剩下部門和聲明一個函數一樣,然則StringProcess不是函數名,而是拜托類型名

聲明的拜托是一品種型,就像int、Person一樣,假如要用的話還要聲明拜托類型的變量,聲明拜托類型變量的方法:StringProcess f1;

將拜托類型變量指向函數 StringProcess sp = new StringProcess(SayHello),如許便可以像挪用通俗函數一樣把sp當做函數用了。拜托可以看作是函數的指針。整數可以用整數變量指向它,對象可以用對象變量指向它,函數也能夠用拜托變量指向它。和直接挪用函數的差別:用拜托便可以指向隨意率性的函數,哪怕是之前沒界說的都可以,而不應用受限於那幾種。

將拜托類型變量指向函數還可以簡化成StringProcess sp = SayHello,編譯器幫我們停止了new。然則不克不及sp=PrintIt(),由於如許就成了函數挪用。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Wolfy.DelegateTest
{
    class Program
    {
        delegate void StringProcess(string s);
        static void Main(string[] args)
        {
            string s = "HI,I AM WOLFY";
            string s2 = "HOW DO YOU DO?";
            //界說拜托變量p
            StringProcess p = new StringProcess(ToLower);
            //簡化方法
            StringProcess p2 = ToLower;
            p(s);
            p2(s2);
            Console.Read();
        }
        static void ToLower(string s)
        {
            Console.WriteLine(s.ToLower());
        }
    }
}

成果:


StringProcess p2 = ToLower;

這類簡化方法,編譯器究竟為我們做了甚麼?可以經由過程反編譯對象看一下:

可以見編譯器幫我們new了一個。

前往類型和簽名指定了拜托的接收辦法的情勢:也就是你的拜托是甚麼款式的,指向的辦法也如果甚麼款式的,好比這裡前往類型為void 參數是string類型的。

匿名辦法

應用Delegate的時刻許多時刻沒需要應用一個通俗的辦法,由於這個辦法只要這個Delegate會用,而且只用一次,這時候候應用匿名辦法最適合。

匿名辦法就是沒著名字的辦法。3就是沒著名字的int對象。3+5就是兩個匿名int對象的相加,許可匿名對象,就許可匿名辦法。

ProcessWordDelegate p = delegate(string s)

            {

                Console.WriteLine(s);

            };

曉得C#中有匿名辦法,看到這類寫法曉得是匿名函數便可

多播拜托*

  拜托的增減辦法

  d+=SayHello,為拜托增長一個辦法,不要感到奇異,由於它就是d=d+ SayHello

  d-=SayHello,將辦法從拜托中移除。

 留意:在應用多播拜托的時刻,普通是讓拜托指向前往值為void的辦法,否則會籠罩前往值,輸入最初一個辦法的前往值。

 
 class Program
    {
        delegate int IntProcess(int a, int b);
        static void Main(string[] args)
        {
            IntProcess p = Add;
            p += Minus;
            int result = p(1, 2);
            Console.Write(result);
            Console.Read();
        }
        static int Add(int a, int b)
        {
            return a + b;
        }
        static int Minus(int a, int b)
        {
            return a - b;
        }
    }
 

成果為:-1。
從成果可以看出是前往了最初一個辦法Minus。

拜托的實質

    其實就是一個類把辦法包裝了一下,拜托都繼續自System.MulticastDelegate,而System.MulticastDelegate又繼續自System.Delegate

    多播拜托就是有一個拜托數組,順次挪用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved