委托

委托 delegate

<font size=2>是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。它可以定义在类体外。</font>

// 实例化
Action<int> fun1 = new Action<int>(
    delegate(int i){
        Console.WriteLine(i);
    });

// 匿名函数
function Method1(Action<int> callback)
{
    callback();
}

Method1(delegate(i){
    Console.WriteLine(i);
});

// Lambda表达式
Method1(i=>Console.WriteLine(i));

<pre>
<font color=blue>public delegate string GetNameDelegate;</font>
public class Test
{
public Test()
{
PrintName(GetNameID, 11);

}

private void PrintName(<font color=blue>GetNameDelegate fun</font>, int id)
{
    Console.WriteLine( fun(id) );
}

private string GetNameID(int id)
{
    return "HeHe " + id;
}       

}

</pre>
<font size=2>委托对象的类型为Delegate,可以将自定义的委托存入,取出转换类型再调用</font>

List<Delegate> lstDe = new List<Delegate>();
...
MyDelegate myd = lstDe[0] as MyDelegate;
myd();

事件 event

<font size=2>事件是基于委托的封装,主要解决两个问题:
<li>委托第一次添加事件时,里要初始化
<li>无法修改委托的权限使其不被外部修改
</font>
<pre>
public class MouseListener
{
public delegate void CallbackDelegate(GameObject go);
public <font color=blue>event CallbackDelegate eventMouseClick</font>;
}

public void Test()
{
MouseListener liser = new MouseListener();

// 第一次使用不需要赋值操作
liser.event += OnMouseClick;    

// 不可以改变event的值
// liser.event = OnMouseClick   // Error

}

private void OnMouseClick(GameObject go)
{
}
</pre>

Action

<font size=2>无返回类型的泛型委托</font>

public Action actionDelegate1;
public Action<string, int> actionDelegate2;

Func

<font size=2>有返回类型的泛型委托,参数最后一项为返回值类型</font>

// 参数为string型,返回值为int型
public Func<string, int> funcDelegate;

Predicate

<font size=2>返回类型为bool的委托</font>

// 返回bool,参数为int
public Predicate<int> predicateDelegate;

EventHandler

<font size=2>事件处理函数的委托</font>

// FCL中的声明
public delegate void EventHandler(object sender, EventArgs e);
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e) where TEventArgs : EventArgs;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,188评论 19 139
  • 一 关于委托 1.委托的概念: C# 中的委托(Delegate)是一种引用类型变量,它类似于C的函数指针,...
    SharaYuki阅读 8,978评论 1 9
  • 委托在编译的时候会编译成类;是一种引用类型,定义了方法的类型;委托保存的是对函数(function)的引用。 声明...
    1cf694582c2f阅读 2,981评论 1 2
  • 本来应该学习泛型与委托的,但是发现C#这里还没有系统的记录过委托与事件,所以先打算把委托与事件补上再继续泛型与委托...
    一个有味道的名字阅读 5,357评论 1 5
  • 明星级教练为大家亲自示范,能快速的练出6块腹肌,而且简单易学特别适合健身新手,是公认训练腹肌最有效的方法之一。每个...
    谷哥食堂阅读 1,796评论 0 0

友情链接更多精彩内容