c#1 是在2002年初的时候发布的,目前开发语言有很多,我个人还是觉得c++,java,c#算是老大哥级别,天下游戏一大抄,其实语言也是一样。虽然每个语言的设计者都不一样,但大家的核心思想还是比较接近的(大家都是互相抄的)
那么在c#1时代,最具代表性的几个语言特点是什么呢。我觉得有下面几个:
1:委托
2:属于c#的类型系统
3:值与引用,两种类型所涉及的托管与非托管机制
4:元表与反射
5:接口
不急不急,那我们来一个个聊,
先来聊聊第一个。委托是什么东西:
委托,一言以蔽之:
他是一个对象(好像没说一样)
是个什么对象呢:是一个可以同步又可以异步,而且内部会有一个调用链进行调用方法维护的,支持多路广播的,泛型的一个用于调用方法的对象 ……(好累)
那归根结底,他是用来调用方法的。那有人会问,我调个函数不就也一样调用方法了么,那差别就大了,首先我前面就说过了,天下语言一大抄,在设计之初,很多人觉得c#的委托不是和c++的函数指针差不多么,好的,如果你这么理解也没错(只是有点肤浅而已),他是一个提供了间接的方法,也就是说他不需要直接指定一个行为执行,而是封装这个行为包含在一个对象中,这个对象就像其它对象一样使用,而且这个对象可以封装,也可以看做一个方法的接口,将委托的实例看做实现了那个接口的一个对象。
有人说这话好难理解,那我来简单举个栗子你就明白了:
有一天阳光明媚,我带着我的狗出去散步,突然发现了一个漂亮MM,但是我这么高贵怎么可能亲自出马呢。于是!就“委托”了我的萌萌的大金毛去找MM要微信号(在它脖子上挂个牌子:好想认识你,请把微信号留给我吧),然后我的大金毛就聪明的过去啦。我想肯定比我亲自出去要成功率高吧,呀!刚才谁说的?谁说人不如狗的?
那我们来看看代码怎么写:
首先声明一个委托类型:
/* 委托类型这样: * 要所得一个字符串(这里就是MM的微信,当然以后也可能是别的,主要看委托谁)
* 有一个形参与是字符串(这里是挂在狗脖子上的牌子上的字) */
delegate string getSomeThingWithMsg(string msg);
那下面是我的狗(对象)所包含的行为:
class Dog{
//这里方法我就不做具体实现了
public AnimalSound Yap();//狗叫,返回一个AnimalSound的类(假定有这个类)
public void Sleep();//没有返回值的睡觉方法
public void Eat(Food food);//带有一个形参的进食方法
public string FoundSomething(string msg);//金毛巡回犬当然要找东西啦。msg是要找的东西,返回一个巡回的结果
}
c#中委托实例需要一个