zoukankan      html  css  js  c++  java
  • 委托 事件 lambda表达式

    委托就是以方法为参数的类型。不懂,

    看代码

    正常情况下是这样的

    有个方法是

    public void Love(string country)

    {

      messagebox.show("I Love"+" "+country);

    }

    你要调用这个方法是不是这样的啊

    string m="中国!";

    Love(m);

    委托就是在这个例子中,Love若是为委托的话,那么m就是一个方法。

    但是这样的效果肯定不好,I Love 中国 应该为  我爱中国 

    加个判断

        if(country="中国")

        messagebox.show("我爱"+" "+country);

    如果是其他的国家的呢,,

    写个方法去判断国家名字 

    public void Country(string countryName)

    {

      if(countryName="中国")

        China(countryName);

    }

     如果是中国的话,则调用这个方法

    public void China(string country)

    {

      messagebox.show("我爱"+" "+country);

    }

    这样写很麻烦 要是把国家和语言都传递给一个方法

    public void Love(string lan,string country)

    {

      messagebox.show(lan+" "+country);

    }

    调用的时候就可以这样写了,Love("我爱","中国");但是程序员不是神,他不可能知道每个国家的语言吧

    public void ChinaLove(string country)

    {

      messagebox.show("我爱"+" "+country);

    }

    但是前提是我得判断是哪一国家的啊,,但是全球有那么多的国家,如果我把国家的名字作为参数放在 love方法里,然后根据不同的国家,执行对应的代码,那该多好啊

     有一个神奇的函数 HHH(countryName ,Method) 第一个是国家的名字,第二个是执行的方法 比如我如果选的是中国=》ChinaLove("中国"); 

    委托就是这样的啊

    delegate void Language(string Country); 加了个delegate 其他的和方法没有什么区别啊 这是定义,但是我怎用呢,是不是想到开头的m的定义是 string m="";

    所以这里的委托用的时候应该这样写

    Language delLang ;//这是先定义好,还没有赋值呢

    那段神奇的结构就是这样的了

    HHH(china,deLang)

    但是我怎么调用啊

    HHH(china,deLang)

    {

      deLang(china)

    }

    这样都行啊,,我记得字符出有拼接的难道他也有,,好像真有

    我难道可以这样

    Language Chi;

    Language Eng+=Chi;都可以

    还挺方便的,比如一个混血儿,爱两个国家 就可以

    Language Chi;

    Language f+=Chi

    HHH(china,Eng);

    但是有个国家变得很差劲,不爱了

    Eng-=f;

    我有很多地方用到这类性的,怎么办,,总不能写同一个类里面

    委托写在一个类里面 比如说叫Test类

    调用的时候得这样吧

    Test T=new Test();

    T.HHH(参数)

    要是那个国家变好了 Language f+=Chi;

    我得这样写

    HHH(“中国”,f);会有两个弹窗

    其实是不是f 相当于是传递了两次, 优化吧

    HHH(string country)

    {

    if(deLang!=null)

       deLang(country)

    }

    前提是这个委托的访问修饰符必须是public ,但是都是public很容易错啊,必须改为private ,改为私有的,调不了啊。如果能像string那样进行封装成属性,,该多好吧

    那就用事件吧,,我只知道老师教的click事件,其他的不懂,但是只知道有event,难道是用event,,

     public event Language deLang()

    但是事件 只能出现在 += 或 -= 的左边

    从上面好像是 HHH函数 听强大的,他能你传递的参数来做相应的事情,,是不是相当于监听啊,,我一直在监听你要传给我的参数,然后执行方法,

    我什么时候要用委托啊,还有事件啊,,不想用if else 的时候,,用if else 粗心的人比较容易出bug,我不太喜欢,,,

    但是这样调用太麻烦了,又懒了,那就用lambda ,这啥玩意,到msdn上看看

    delegate void Language(string Country); 

  • 相关阅读:
    Linux CentOS完全卸载PHP
    linux下安装composer以及使用composer安装laravel
    Linux安装Composer
    2012第二届GIS制图大赛——公开课技术问题&答疑(珍贵资源哦!)(http://blog.csdn.net/arcgis_all/article/details/8216984)
    ArcMap运行时出现Runtime Error错误的解决方案
    土地用途 新的12大类
    云南省第一次全国地理国情普查信息采集(第一批) 招标中标公示
    云南省第一次全国地理国情普查信息采集(第二批)招标中标公示
    云南省第一次全国地理国情普查信息采集(第三批)招标中标公示
    C#加密算法汇总(转载)http://www.cnblogs.com/zengxiangzhan/archive/2010/01/30/1659687.html
  • 原文地址:https://www.cnblogs.com/http-www/p/3448714.html
Copyright © 2011-2022 走看看