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

C#中拜托和事宜的差別實例解析

編輯:C#入門知識

C#中拜托和事宜的差別實例解析。本站提示廣大學習愛好者:(C#中拜托和事宜的差別實例解析)文章只能為提供參考,不一定能成為您想要的結果。以下是C#中拜托和事宜的差別實例解析正文


本文實例剖析了C#中拜托和事宜的差別,分享給年夜家供年夜家參考之用。詳細以下:

年夜致來講,拜托是一個類,該類外部保護著一個字段,指向一個辦法。事宜可以被看做一個拜托類型的變量,經由過程事宜注冊、撤消多個拜托或辦法。本篇分離經由過程拜托和事宜履行多個辦法,從中領會二者的差別。

1、經由過程拜托履行辦法

class Program
{
    static void Main(string[] args)
    {
      Example example = new Example();
      example.Go();
      Console.ReadKey();
    }
}
public class Example
{
    public delegate void DoSth(string str);
    internal void Go()
    {
      //聲明一個拜托變量,並把已知辦法作為其結構函數的參數
      DoSth d = new DoSth(Print);
      string str = "Hello,World";
      //經由過程拜托的靜態辦法Invoke觸發拜托
      d.Invoke(str);
    }
    void Print(string str)
    {
      Console.WriteLine(str);
    }
}

上述代碼完成:

① 在CLR運轉時,拜托DoSth現實上就一個類,該類有一個參數類型為辦法的結構函數,而且供給了一個Invoke實例辦法,用來觸發拜托的履行。
② 拜托DoSth界說了辦法的參數和前往類型
③ 經由過程拜托DoSth的結構函數,可以把相符界說的辦法賦值給拜托
④ 挪用拜托的實例辦法Invoke履行了辦法

但現實上讓拜托履行辦法還有別的一種方法,那就是:拜托變量(參數列表)

public class Example
{
    public delegate void DoSth(object sender, EventArgs e);
    internal void Go()
    {
      //聲明一個拜托變量,並把已知辦法作為其結構函數的參數
      DoSth d = new DoSth(Print);
      object sender = 10;
      EventArgs e = new EventArgs();
      d(sender, e);
    }
    void Print(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
}

上述代碼完成:

① 拜托DoSth的參數列表和辦法Print的參數列表照樣堅持分歧
② 拜托DoSth中的參數object sender平日用來表現舉措的提議者,EventArgs e用來表現舉措所帶的參數。

而現實上,拜托變量(參數列表),事宜就是采取這類情勢履行辦法的。

2、經由過程事宜履行辦法

public class Example
{
    public delegate void DoSth(object sender, EventArgs e);
    public event DoSth myDoSth;
    internal void Go()
    {
      //聲明一個拜托變量,並把已知辦法作為其結構函數的參數
      DoSth d = new DoSth(Print);
      object sender = 10;
      EventArgs e = new EventArgs();
      myDoSth += new DoSth(d);
      myDoSth(sender, e);
    }
    void Print(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
}

上述代碼完成:

① 聲清楚明了事宜myDoSth,事宜的類型是DoSth這個拜托
② 經由過程+=為事宜注冊拜托
③ 經由過程DoSth拜托的結構函數為事宜注冊拜托實例
④ 采取拜托變量(參數列表)這類情勢,讓事宜履行辦法

並且,經由過程+=還可認為事宜注冊多個拜托。

public class Example
{
    public delegate void DoSth(object sender, EventArgs e);
    public event DoSth myDoSth;
    internal void Go()
    {
      //聲明一個拜托變量,並把已知辦法作為其結構函數的參數
      DoSth d = new DoSth(Print);
      DoSth d1 = new DoSth(Say);
      object sender = 10;
      EventArgs e = new EventArgs();
      //為事宜注冊多個拜托
      myDoSth += new DoSth(d);
      myDoSth += new DoSth(d1);
      myDoSth(sender, e);
    }
    void Print(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
    void Say(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
}

以上,經由過程+=為事宜注冊1個或多個拜托實例,現實上,還可認為事宜直接注冊辦法。

public class Example
{
    public delegate void DoSth(object sender, EventArgs e);
    public event DoSth myDoSth;
    internal void Go()
    {
      object sender = 10;
      EventArgs e = new EventArgs();
      //為事宜注冊多個拜托
      myDoSth += Print;
      myDoSth += Say;
      myDoSth(sender, e);
    }
    void Print(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
    void Say(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
}  
 

3、經由過程EventHandler履行辦法

先來看EventHandler的源代碼。

public delegate void EventHandler(object sender, System.EventArgs e);

可見,EventHandler就是拜托。如今就應用EventHandler來履行多個辦法。

public class Example
{
    public event EventHandler myEvent;
    internal void Go()
    {
      object sender = 10;
      EventArgs e = new EventArgs();
      //為事宜注冊多個拜托
      myEvent += Print;
      myEvent += Say;
      myEvent(sender, e);
    }
    void Print(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
    void Say(object sender, EventArgs e)
    {
      Console.WriteLine(sender);
    }
}

總結:

① 拜托就是一個類,也能夠實例化,經由過程拜托的結構函數來把辦法賦值給拜托實例
② 觸發拜托有2種方法: 拜托實例.Invoke(參數列表),拜托實例(參數列表)
③ 事宜可以看做是一個拜托類型的變量
④ 經由過程+=為事宜注冊多個拜托實例或多個辦法
⑤ 經由過程-=為事宜刊出多個拜托實例或多個辦法
⑥ EventHandler就是一個拜托

信任本文所述對年夜家C#法式設計的進修有必定的自創價值。

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