您的位置:首页 > 编程语言 > C#

CSharp_delegate简单讲解;

2014-03-25 09:44 302 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace workroom
{
/// <summary>
/// 委托(delegate):委托调用静态方法或者实例方法;
/// 资料出处:http://zhidao.baidu.com/link?url=KiyFngnhaajRK56fW6gZfkrkF2qPlav2pHjYvdmVp12daeJJ3mvDEm2TKqOPwmLoJE_c-ZCk2EkmbWN1uH9E-a;
/// </summary>
class DelegateClass
{
//1.定义Delegate函数数据结构;
public delegate void GoDelegate();  // 绑定的方法没有参数;

//2.定义Delegate将引用的静态方法或引用类实例及其实例方法;
public static void MyDelegateStaticFunc()
{
Console.WriteLine("-->delegate function...");
}

[STAThread]
static void Main(string[] args)
{
//3.Delegate数据变量_指向->实例方法
GoDelegate goDelegate = new GoDelegate(MyDelegateStaticFunc);
//4.通过Delegate数据变量_执行实例方法
goDelegate();

//狮子(LionDelegateClass)的属性显示(ShowAnimalType)方法调用
LionDelegateClass lionDelegate = new LionDelegateClass();
lionDelegate.ShowAnimalType("DelegateClass");

//马(HorseDelegateClass)的属性显示(ShowAnimalType)方法调用
HorseDelegateClass horseDelegate = new HorseDelegateClass();
horseDelegate.ShowAnimalType("DelegateClass");

// 狗 (DogDelegateClass)的属性显示(ShowAnimalType)方法调用
DogDelegateClass dogDelegate = new DogDelegateClass();
dogDelegate.ShowAnimalType("DelegateClass");
}

/// <summary>
/// 狗(DogDelegateClass)_多路委托
/// 在C#中,委托(Delegate)类是多路委托,这就说可以同时指向多个处理函数,
/// 并且可以按照委托的先后顺序,执行相应的函数。
/// </summary>
public class DogDelegateClass : MyAnimalDelegateClass
{
public DogDelegateClass()
{
//多路委托函数 设定
this.delegateFunction = new DelegateFunction(subFunction31);
this.delegateFunction += new DelegateFunction(subFunction32);
}
//委托函数1
private void subFunction31(string parameter)
{
System.Console.WriteLine(
string.Format("-->[{0}]This is a dog....", parameter));
}
//委托函数2
private void subFunction32(string parameter)
{
System.Console.WriteLine(
string.Format("-->[{0}]This is a nice dog....", parameter));
}
}

/// <summary>
/// 马(HorseDelegateClass)
/// </summary>
public class HorseDelegateClass : MyAnimalDelegateClass
{
public HorseDelegateClass()
{
// 为委托绑定实例方法
this.delegateFunction = new DelegateFunction(subFunction2);
}

//马(HorseDelegateClass)实例方法的实装
private void subFunction2(string parameter)
{
System.Console.WriteLine(string.Format("-->[{0}]This is a horse....", parameter));
}
}

/// <summary>
/// 狮子(LionDelegateClass)
/// </summary>
public class LionDelegateClass : MyAnimalDelegateClass
{
public LionDelegateClass()
{
// 为委托绑定实例方法
this.delegateFunction = new DelegateFunction(subFunction1);
}

//狮子(LionDelegateClass)实例方法的实装
private void subFunction1(string parameter)
{
System.Console.WriteLine(string.Format("-->[{0}]This is a lion....", parameter));
}
}

/// <summary>
/// 动物基类(MyAnimalDelegateClass)
/// </summary>
public class MyAnimalDelegateClass
{
// 定义delegate函数->用于声明delegate变量_Delegate函数数据结构
public delegate void DelegateFunction(string parameter);    // 委托方法需要parameter参数;

// 定义定义delegate变量->用于绑定相应方法(此处在子类绑定)_Delegate类型属性
private DelegateFunction m_delegateFunction = null;
public DelegateFunction delegateFunction
{
get
{
return m_delegateFunction;
}
set
{
m_delegateFunction = value;
}
}

/// <summary>
/// 属性显示(ShowAnimalType)方法
/// </summary>
/// <param name="strFuncName"></param>
public void ShowAnimalType(string parameter)
{
// 如果delegate变量存在(说明子类已绑定到子类方法)
if (delegateFunction != null)
{
object[] args = { parameter };
//调用Delegate引用的实例方法
delegateFunction.DynamicInvoke(args);
}
}
}
}
}

//执行结果:
//-->delegate function...
//-->[DelegateClass]This is a lion....
//-->[DelegateClass]This is a horse....
//-->[DelegateClass]This is a dog....
//-->[DelegateClass]This is a nice dog....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: