关闭

C# 中委托的簡單理解

421人阅读 评论(0) 收藏 举报
导读:
        委托是一種可以把引用存儲為函數的型,聽起來很棘手,但其機制是非常簡單。
        據我個人理解,可以解釋為:委托是一個可以調用其它方法、事件等的架子。
        委託的的聲明類似於函數,但不帶函數體,且要使用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(); 
        }
 
        }
 
  Scott CKT 著
        本文转自
http://www.cnblogs.com/scottckt/archive/2007/09/14/893159.html  
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:146233次
    • 积分:2207
    • 等级:
    • 排名:第17748名
    • 原创:64篇
    • 转载:31篇
    • 译文:3篇
    • 评论:45条
    文章分类
    最新评论