C語言中文網 目錄
首頁 > C#教程 > C#委托和事件 閱讀:149

C#命名方法委托

< 上一頁C#委托 C#多播委托下一頁 >

C# 語言中命名方法委托是最常用的一種委托,其定義的語法形式如下。

修飾符  delegate  返回值類型  委托名 ( 參數列表 );

從上面的定義可以看出,委托的定義與方法的定義是相似的。例如定義一個不帶參數的委托,代碼如下。
public delegate void MyDelegate();
在定義好委托后就到了實例化委托的步驟,命名方法委托在實例化委托時必須帶入方法的具體名稱。

實例化委托的語法形式如下。

委托名  委托對象名 = new 委托名 ( 方法名 );

委托中傳遞的方法名既可以是靜態方法的名稱,也可以是實例方法的名稱。

需要注意的是,在委托中所寫的方法名必須與委托定義時的返回值類型和參數列表相同。

在實例化委托后即可調用委托,語法形式如下。

委托對象名 ( 參數列表 );

在這里,參數列表中傳遞的參數與委托定義的參數列表相同即可。

下面分別通過兩個實例來演示在委托中應用靜態方法和實例方法的形式。

【實例 1】創建委托,在委托中傳入靜態方法于控制臺輸出“Hello Delegate!”。

根據題目要求,代碼如下。
class Program
{
    public delegate void MyDelegate();
    static void Main(string[] args)
    {
        MyDelegate myDelegate = new MyDelegate(Test.SayHello);
        myDelegate();
    }
}
class Test
{
    public static void SayHello()
    {
        Console.WriteLine("Hello Delegate!");
    }
}
執行上面的代碼,效果如下圖所示。

在委托中使用靜態方法

若使用靜態方法,在向委托中傳遞方法名時只需要用“類名.方法名”的形式。

【實例 2】將實例 1 中的靜態方法改成實例方法。

根據題目要求,代碼如下。
class Program
{
    public delegate void MyDelegate();
    static void Main(string[] args)
    {
        MyDelegate myDelegate = new MyDelegate(new Test().SayHello);
        myDelegate();
    }
}
class Test
{
    public void SayHello()
    {
        Console.WriteLine("Hello Delegate!");
    }
}
執行上面的代碼,效果與實例 1 中效果一致。

由于在委托中使用的是實例方法,則需要通過類的實例來調用方法,即使用“new 類名 (). 方法名”的形式。

除了使用匿名對象的方式調用方法以外,也可以先創建類的實例,再通過類的實例調用方法。

在了解了命名方法委托的寫法以后,下面通過一個綜合實例來演示命名委托的應用。

【實例 3】使用委托完成將圖書信息按照價格升序排序的操作。

根據題目要求,先定義圖書信息類,然后定義對圖書價格排序的方法。圖書信息類的代碼如下。
class Book:IComparable<Book>
{
    //定義構造方法為圖書名稱和價格賦值
    public Book(string name,double price)
    {
        Name = name;
        Price = price;
    }
    //定義圖書名稱屬性
    public string Name { get; set; }
    //定義圖價格屬性
    public double Price { get; set; }
    //實現比較器中比較的方法
    public int CompareTo(Book other)
    {
        return (int)(this.Price - other.Price);
    }
    //重寫ToString方法,返回圖書名稱和價格
    public override string ToString()
    {
        return Name + ":" + Price;
    }
    //圖書信息排序
    public static void BookSort(Book[] books)
    {
        Array.Sort(books);
    }
}
在 Main 方法中定義委托調用圖書排序的方法,代碼如下。
class Program
{
    //定義對圖書信息排序的委托
    public delegate void BookDelegate(Book[] books);
    static void Main(string[] args)
    {
        BookDelegate bookDelegate = new BookDelegate(Book.BookSort);
        Book[] book = new Book[3];
        book[0] = new code_1.Book("計算機應用", 50);
        book[1] = new code_1.Book("C# 教程", 59);
        book[2] = new code_1.Book("VS2015應用", 49);
        bookDelegate(book);
        foreach(Book bk in book)
        {
            Console.WriteLine(bk);
        }
    }
}
執行上面的代碼,效果如下圖所示。

命名委托的應用

從上面的執行效果可以看出,通過委托調用的圖書排序方法 (BookSort) 按照圖書價格升序排列了圖書信息。

需要注意的是,由于 Book[] 數組是引用類型,因此通過委托調用后其值也發生了相應的變化,即 book 數組中的值已經是完成了排序操作后的結果。
< 上一頁C#委托 C#多播委托下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo