C#中Delegate委托的使用

本文介绍了C#中的Delegate委托,强调了其在创建事件和简化代码中的作用。通过一个侦探工作的例子,说明如何使用委托来切换不同的工作方法,这些方法通常需要相同类型的参数。文中展示了如何定义委托、相关工作方法以及如何通过委托调用这些方法。
摘要由CSDN通过智能技术生成

由于我是艺术院校毕业生,死记硬背那些冷冰冰的代码对我而言实在太痛苦了,所以我都采取较为形象的记忆方式,希望这样对其他人在记忆上也会有帮助。

委托:

委托一般用于创造事件,但是单个使用的时候通常是用于将代码简洁化,委托能够将多个需要传递相同变量类型的函数通过一个委托去进行切换,从而达到简化代码的效果。

假定名为有个David的侦探,他的具体工作内容有: 找寻失物, 跟踪探索 两个工作内容,但是他对于这些工作内容不外乎就是需要一个参数,目标。

private delegate void Detective ( string target ) ;
private Detective David ;

接下来编写他的工作内容,主要有两个:

private string SearchForMissingThing ( string target )
{
	return "I found " + target ;
}
	
private string TrackingSomeOne ( string target )
{
	return "I know " + target + " is doing something" ;
}
并且我们用枚举Request把工作名称记录起来:

public enum Request
{
	SearchForMissingThing,
	TrackingSomeOne
};

好了,现在侦探也有了,具体工作内容也有了,接下来就只剩下开设柜台以方便接收工作内容:

public void GetRequest ( Request request, string target )
{
	switch ( request )	
	{
	case Request.SearchForMissingThing:
		david = new Detective ( SearchForMissingThing ) ;
		break;
			
	case Request.TrackingSomeOne:
		david = new Detective ( TrackingSomeOne ) ;
		break;
	}
		
	GetAnswer () ;
}

private void GetAnswer ()
{
	Debug.Log ( david ( target ) ) ;
}

完整代码如下:

//DetectiveAgency.cs
public class DetectiveAgency
{
	private delegate string Detective ( string target ) ;
	private Detective david ;
	
	public void GetRequest ( Request request, string target )
	{
		switch ( request )	
		{
		case Request.SearchForMissingThing:
			david = new Detective ( SearchForMissingThing ) ;
			break;
			
		case Request.TrackingSomeOne:
			david = new Detective ( TrackingSomeOne ) ;
			break;
		}
		
		GetAnswer ( target ) ;
	}
	
	private void GetAnswer ( string target )
	{
		Debug.Log ( david ( target ) ) ;
	}
	
	private string SearchForMissingThing ( string target )
	{
		return "I found " + target ;
	}
	
	private string TrackingSomeOne ( string target )
	{
		return "I know " + target + " is doing something secret" ;
	}
}

接下来我们通过外部调用,对David赋予一个工作内容,并在最后给我返回我想要知道的内容。接下来就简单了,新建一个脚本,并取名为DoingRequest,具体代码如下:

//DoingRequest.cs
public class DoingRequest:MonoBehaviour
{
	private DetectiveAgency Agent = new DetectiveAgency () ;
	
	void Start ()
	{
		Agent.GetRequest ( Request.SearchForMissingThing, "Diamond" ) ;
		Agent.GetRequest ( Request.TrackingSomeOne, "Alan" ) ;
	}
}

然后输出:


我也仍然在学习阶段,若有不对的地方还需多多指教






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值