您的位置:首页 > 其它

委托 事件 lambda表达式

2013-11-28 23:39 295 查看
委托就是以方法为参数的类型。不懂,

看代码

正常情况下是这样的

有个方法是

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: