程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#委托與代理模式

C#委托與代理模式

編輯:C#入門知識

在設計模式的學習過程中,委托是一個不容易理解的知識點。尤其是在學完代理模式之後,就更不知道什麼是什麼了。下面分別看一下各自的實例,來看一下這兩者有什麼區別。


委托是一種引用方法的類型。一旦為委托分配了方法,委托將於該方法具有完全相同的行為。委托的方法的使用可以向其他任何方法一樣,具有參數和返回值。
委托可以是對函數的抽象,即為函數的“類”,委托的實例對象將代表一個具體的函數。


委托的實例:

class Program
    {
        static void Main(string[] args)
        {
            Teacher Tc = new Teacher("趙老師");    //實例化老師和學生
            Student St1 = new Student("張三");
            Student St2 = new Student("李四");

            //把學生的行為交給 委托
            Tc.TeacherCome += new Teacher.EventHandler(St1.StopCopyWork);   
            Tc.TeacherCome += new Teacher.EventHandler(St2.StopWhisper);    

            Tc.Come();

        }
    }

    class Teacher
    {
        private string name;
        public Teacher(string name)
        {
            this.name = name;
        }
        public delegate void EventHandler();        //聲明一個委托EventHandler
        public event EventHandler TeacherCome;      //聲明事件名稱,事件類型為EventHandler
        public void Come()                          //老師的行為
        {
            Console.WriteLine("{0}來了", name);       
            if (TeacherCome != null)            //如果需要委托,則執行下面程序
            {
                TeacherCome();                  
            }
        }
    }
    class Student
    {
        private string name;
        public Student(string name)
        {
            this.name = name;
        }
        public void StopWhisper()
        {
            Console.WriteLine("老師來了,{0}停止說話",name);
        }
        public void StopCopyWork()
        {
            Console.WriteLine("老師來了,{0}停止抄作業",name);
        }
    }

運行結果:

\


<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+tPrA7cSjyr2jujwvcD4KPHA+ICAgICAgzqrG5Mv7ttTP88zhuanSu9bWtPrA7aOswLSw79b6tO+1vcS/tcShozwvcD4KPHA+tPrA7cSjyr3KtcD9o7o8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">class Program { static void Main(string[] args) { SchoolGirl mm = new SchoolGirl(); mm.Name = "jiaojiao"; Proxy daili = new Proxy(mm); daili.GiveDolls(); daili.GiveFlowers(); daili.GiveChocolate(); } } class SchoolGirl //定義 女孩類 { private string name; public string Name { get { return name; } set { name = value; } } } interface IGiveGift //創建一個送禮物的接口 { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } class Pursuit:IGiveGift //追求者類,使用送禮物的接口 { SchoolGirl mm; //要追求女孩的名字 public Pursuit(SchoolGirl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine(mm.Name+"送你洋娃娃"); } public void GiveFlowers() { Console.WriteLine(mm.Name + "送你花"); } public void GiveChocolate() { Console.WriteLine(mm.Name + "送你巧克力"); } } class Proxy : IGiveGift //定義代理模式,也用送禮物的接口 { Pursuit gg; public Proxy(SchoolGirl mm) //區別在於,代替追求者 送禮物 { gg=new Pursuit(mm); } public void GiveDolls() { gg.GiveDolls(); } public void GiveFlowers() { gg.GiveFlowers(); } public void GiveChocolate() { gg.GiveChocolate(); } }
運行結果:



委托與代理的比較

代理:是把一些事情交給某人幫忙去完成。

委托:是當某件事情發生的時候,順便干某件事情。委托就相當於一個觸發器罷了。





  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved