现在的位置: 首页 > 综合 > 正文

C# 中委托的簡單理解

2012年04月03日 ⁄ 综合 ⁄ 共 2037字 ⁄ 字号 评论关闭
    委托是一種可以把引用存儲為函數的型,聽起來很棘手,但其機制是非常簡單。
    據我個人理解,可以解釋為:委托是一個可以調用其它方法、事件等的架子。
    委託的的聲明類似於函數,但不帶函數體,且要使用delegate關鍵字。委托的聲明指定了一個函數名,其它包含一個返類型和參數列表。
下邊做一個簡單的例字,幫助大家理解。

    class Program
    {
        
/// <summary>
        
/// 1、定義委托
        
/// </summary>
        
/// <param name="param1"></param>
        
/// <param name="param2"></param>
        
/// <returns></returns>
        delegate double ProcessDelegate(double param1, double param2);
        
/// <summary>
        
/// 得到乘積
        
/// </summary>
        
/// <param name="param1"></param>
        
/// <param name="param2"></param>
        
/// <returns></returns>
        static double Multiply(double param1, double param2)
        {
            
return param1 * param2;
        }
        
/// <summary>
        
/// 得到除數
        
/// </summary>
        
/// <param name="param1"></param>
        
/// <param name="param2"></param>
        
/// <returns></returns>
        static double Divide(double param1, double param2)
        {
            
return param1 / param2;
        }

        static void Main(string[] args)
        {
            
//2、聲明一下委托變量
            ProcessDelegate process;
            Console.WriteLine(
"Enter 2 number separated with a comma:");
            
string input = Console.ReadLine();
            
int commaPos = input.IndexOf(',');
            
double param1 = Convert.ToDouble(input.Substring(0,commaPos));
            
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length-commaPos-1));
            Console.WriteLine(
"Enter M to multuply or D to divide:");
            input 
= Console.ReadLine();
            
if (input=="M")
            {
                
                
//3、把一個函數引用賦給委托變量。
                
//注:須使用new 關鍵字創建一個新委托,在這個關鍵字後面,指定委託類型,提供一個函數,不帶括號
                
//此處將調用 Multiply()函數
                process = new ProcessDelegate(Multiply);
            }
            
else
            {
                process 
= new ProcessDelegate(Divide);
            }
            
//4、使用委托調用函數
            Console.WriteLine("Result:{0}",process(param1,param2));
            Console.ReadKey();
        }
    }

【上篇】
【下篇】

抱歉!评论已关闭.