下面就代理的強大功能進行詳細介紹:首先然我們實現一個這樣的功能,考慮一下該如何用指向基類的對象調用子類的成員函數。在這裡程式員是不是點懷戀指標了,不過在c#中這樣的功能完全也可實現的,使用一個單獨的代理我們可以完成這項功能。以下代碼來自Timothy A. Vanover文章。
namespace DelegatesCS
{
using System;
public class Wisdom //包含代理的類
{
public delegate string GiveAdvice();
public string OfferAdvice(GiveAdvice Words)
{
return Words();
}
}
public class Parent //基類
{
public virtual string Advice()
{
return("Listen to reason");
}
~Parent() {}
}
public class Dad: Parent //子類
{
public Dad() {}
public override string Advice()
{
return("Listen to your Mom");
}
~Dad() {}
}
public class Mom: Parent //子類
{
public Mom() {}
public override string Advice()
{
return("Listen to your Dad");
}
~Mom() {}
}
public class Daughter //不繼承與基類的類
{
public Daughter() {}
public string Advice()
{
return("I know all there is to life");
}
~Daughter() {}
}
public class Test
{
public static string CallAdvice(Parent p)//使用基類
{
Wisdom parents = new Wisdom();
Wisdom.GiveAdvice TeenageGirls = new Wisdom.GiveAdvice(p.Advice);//將Advice方法委託給TeenageGirls委派物件
return(parents.OfferAdvice(TeenageGirls));
}
public static void Main()
{
Dad d = new Dad();
Mom m = new Mom();
Daughter g = new Daughter();
//以下兩個為衍於基類的類
Console.WriteLine(CallAdvice(d));
Console.WriteLine(CallAdvice(m));
//以下為未衍於基類的類,如果調用將出錯。
//Console.WriteLine(CallAdvice(g));
}
}
}
Button 指示哪一個鍵被壓,分為左、右、中、無 。
Clicks 指示滑鼠壓下次數及釋放狀態。
Delta 指示滑鼠轉動數量計數
X 滑鼠點擊x座標點
Y 滑鼠點擊y座標點
Event Handler
private void Form_MouseDown(object sender, System.WinForms.MouseEventArgs e)
{
switch (e.Button)
{
case MouseButtons.Left:
MessageBox.Show(this,"Left Button Click");
break;
case MouseButtons.Right:
MessageBox.Show(this,"Right Button Click" );
break;
case MouseButtons.Middle:
break;
default:
break;
}
}
在你的WinForm中測試你的程式,你會看到通過代理事件被關聯了。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
class I
{
public I(){}
~I() {}
public void IDoLoveYou()
{System.Console.WriteLine("I do love You");}
public void why(){System.Console.WriteLine("why?");}
}
class HER
{
public HER(){}
~HER() {}
public void IDo()
{System.Console.WriteLine("...............");}
public void slient(){System.Console.WriteLine(".........");}
}
class TELEPHONE
{public delegate void heartchat();
public TELEPHONE(){}
~TELEPHONE(){}
public void hello(){System.Console.WriteLine("yesterday night,i telephone to my girlfriend"); }
}
class chat{
static void Main() {
I i=new I();
HER her=new HER();
TELEPHONE telephone =new TELEPHONE();
telephone.hello();