淺談.NET中的委托技朮

来源:互联网 发布:淘宝退货率在哪看 编辑:程序博客网 时间:2024/06/05 03:39

委拖是.NET 引入的一種重要技朮﹐可以實現對象的動態綁定。是面向對象和類型安全。主要用于.NET Framework的事件處理和回調函數。

委拖是一種組合方法﹐簡單的理解:兩個對象參與處理一個請求。接受請求的對象將操作委拖給代理者﹐并將自身傳給代理者﹐讓代理者可以引用接受請求的對象。從某種程度上來說﹐她相當于C++的函數指針﹐或者說接口﹐但比接口好一點的是她可以是靜態的。

使用委拖﹐一般的步驟是﹕聲明委托﹐實例委托﹐調用委托﹗

一個類中的任何方法﹐只要其簽名符合聲明的委托的簽名﹐那么該方法都可以賦給該委托的。

根據GoF設計模式﹐委托結構如下圖﹕(申明﹕該圖并非UML)

 
據該圖﹐代碼就可以很容易的寫成。而且Window類根本不需要實現Area()方法。他可以代理RectangleArea()方法。如下﹕
using System;

namespace DelegateTest
{
    
/// <summary>
    
/// Class1 的摘要描述。
    
/// </summary>

    class Class1
    
{
        
/// <summary>
        
/// 應用程式的主進入點。
        
/// </summary>

        [STAThread]
        
static void Main(string[] args)
        
{
            
//
            
// TODO: 在此加入啟動應用程式的程式碼
            
//
            Window w = new Window ();
            Rectangle r 
= new Rectangle ();
            w.myDelArea 
= new DelArea(r.Area);
            w.myDelArea();
        }

    }

    
public delegate float DelArea();
    
public class Window
    
{
        
public DelArea myDelArea;
    }

    
public class Rectangle
    
{
        
private float Width = 8;
        
private float Height = 9;
        
public float Area()
        
{
            
float returnVaue  = Width * Height;
            Console.WriteLine(
"Width * Height = {0}",returnVaue );
            
return returnVaue;
        }

    }

}

當然﹐在這里﹐可能不用委托更好理解﹐我將其用在這里﹐是想起一個拋磚引玉的作用。歡迎讀者朋友們丟玉﹗呵呵……