程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#的代表類型(delegate)

C#的代表類型(delegate)

編輯:關於C#

在C和C++程序員看來,指針既是他們最強有力的工具之一,同時又給他們帶來了很多苦惱之處。因為指針指向的數據類型可能並不相同,比如你可以把int類型的指針指向一個float類型的變量,而這時程序並不會出錯。而且,如果你刪除了一個不應該被刪除的指針(比如Windows中指向主程序的指針),程序就有可能崩潰。由此可見,濫用指針給程序的安全性埋下了隱患。

正因為如此,在C#語言中取消了指針這個概念。當然,對指針戀戀不捨的程序員仍然可以在C#中使用指針,但必須聲明這段程序是“非安全(unsafe)”的。而我們在這裡要介紹的是C#的一個引用類型--代表(delegate)。它實際上相當於C#中的函數指針原型。與指針不同的是,代表在C#是類型安全的。

在聲明代表時,只需要指定代表指向的原型的類型,它不能有返回值,也不能帶有輸出類型的參數。比如我們可以聲明一個指向int類型函數原型的代表:

delegate int MyDelegate();

如果我們聲明了一個自己的代表,那麼它就是對系統定義的類System.delegate的一個擴展。在代表的實例中,我們可以封裝一個靜態方法,也可以封裝一個非靜態的方法。我們看下面的例子:

程序清單4-2:

using System;
delegate int MyDelegate();  //聲明一個代表
public class MyClass
{
  public int InstanceMethod(){
    console.WriteLine("Call the instance method.");
    return 0;
  }
  static public int StaticMethod(){
    Console.WriteLine("Call the static method.");
    return 0;
    }
  }
  public class Test
  {
    static public void Main()
    {
      MyClass p=new MyClass();
      //將代表指向非靜態的方法 InstanceMethod
      MyDelegate d=new MyDelegate(p.InstanceMethod);
      //調用非靜態方法
      d();
      //將代表指向靜態的方法StaticMethod
      d=new MyDelegate(MyClass.StaticMethod);
      //調用靜態方法
      d();
      }
}
程序的輸出結果是:

call the instance method.
call the static method.
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved