首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

我眼中委派的真正面貌(一)(七)

     編輯:關於C語言

在這裡我們去掉了 event 關鍵字,改用純委派物件來實現。

而後,同樣建立一個上層的 Demo 程式來呼叫這個控制項,同樣比之上一段程式碼要作些許細微的調整:

namespace EventDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.userControl11.MyEvent += new Ctrleven.UserControl1.MyEventHander(this.VirtualEvent);
        }

        public void VirtualEvent()
        {
            MessageBox.Show("委派仿真事件呼叫成功!");
        }
    }
}

看到區別了嗎?呵呵…… 此時 InitializeComponent() 關於事件掛接的那句話已經不見了,因為這次的 MyEvent 並不是一個事件專用的委派物件,而是一個普通的委派實例物件,不會自動被 C# 的編輯器識別。所以,我在主視窗類別的建構方法中人為添加了一句程式碼:

this.userControl11.MyEvent += new Ctrleven.UserControl1.MyEventHander(this.VirtualEvent);

它的作用其實和上一段程式碼中那句是相同的,就本質而言都是在一個類別中操控另一個類別的委派物件而已,只不過因為我們沒有嚴格按照 C# 中的事件宣告方式來實現事件機制,因此,這句程式碼 C# 的編輯器不會很友好的替你產生,而是要靠你自己來寫。呵呵……

可見,程式執行的效果和上一段程式碼大致相同。

在這裡,我想糾正大家的幾個誤區。平時,我經常聽到人們談論,說所謂委派就是將自己寫好的一段程式碼作為參數傳入另一個方法中。沒錯,用委派的確可以實現類似的說法,比方說某一個方法的參數表中的一個參數是委派型別,這樣子的確是可以的。但是,可以實現這種效果的先決要素首先是我們可以利用委派來傳遞一段程式碼(也就是一個方法)。所以說真正起到傳遞方法效果的不是方法中的參數,而是委派物件本身。使用委派物件本身來實現跨類別、跨執行緒甚至跨空間傳遞方法,這種實現形式的使用頻率要比僅僅將委派作為參數,以實現將程式碼傳入另一個方法這樣的實現形式來的高得多得多。

好,寫到這裡,我想應該可以稍微闡述一下我自己的觀點了。呵呵……

個人認為,委派最大的優勢所在就是——其兼有物件和方法二者的性質。我們既可以將一個委派實例物件作為物件來看待甚至操控,亦可以將其作為一個現成的方法來呼叫。(未完待續)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved