委托

作者: 晓龙酱 | 来源:发表于2017-09-18 10:32 被阅读3次

委托 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;

相关文章

  • 第8章:委托、Lambda表达式和事件

    #1. 委托1.1 声明委托1.2 使用委托1.3 简单委托示例1.4 Action和Func委托1....

  • Delegates, events, lambda expres

    Delegates 委托 委托是一个对象,它知道如何调用一个方法 委托类型和委托实例 委托类型定义了委托实例可以调...

  • 哪些事项是不能办理委托公证的?

    很多种委托事项都可以办理公证,比如委托领取公积金、委托诉讼、委托招投标、委托处理工商理赔、房产委托...等,所...

  • 哪些委托是不能公证的?

    很多种委托事项都可以办理公证,比如委托领取公积金、委托诉讼、委托招投标、委托处理工商理赔、房产委托...等,所...

  • JEX合约交易--委托保证金

    用户进行交易委托将可能会需要冻结委托保证金,其具有如下几项规则: 买入委托所需的委托保证金 = 委托价格 * 委托...

  • Kotlin-委托,是否被低估了?

    1、属性委托 kotlin中的委托主要分为类的委托和属性的委托,我们先重点来看属性委托,用的比较多。 标准委托 k...

  • 隐藏之冰山委托

    冰山委托(Iceberg Order)。冰山委托是隐藏部分委托数量(不在系统中公开显示)的委托,也称为隐藏委托(h...

  • 17_DoTween

    委托,Lambda, LinQ串讲 什么是委托 委托类型是怎么声明出来的 泛型委托 我们必须自己创建委托类型吗? ...

  • Kotlin中的委托

    Kotlin中的委托 啥是委托 其实kotlin中的委托的理念就是委托模式也是叫做代理模式;在Kotlin中委托有...

  • Kotlin学习之类与对象3

    委托 由委托实现 委托模式(https://zh.wikipedia.org/wiki/委托模式)已经证明是实现继...

网友评论

      本文标题:委托

      本文链接:https://www.haomeiwen.com/subject/pmbvsxtx.html