M_ary  
本人热爱编程...更期待和谐的团队.. 有意者,请发送邮件与我.. wangkang198802@126.com

1)关于Assembly  

  1  就是一堆相关类的打一个包,这样程序中若用到其他功能,那就只引用该功能所在的程序集即可,减小了尺寸;同时一些程序集内部的类不想让其他程序集调用。  

  2  如果所调用的类在没有引用的程序集中,那么需要添加对所在类的程序集的引用。  

  3  Assembly的访问级别,类如果不标注访问级别就是internal;即只能在程序集内部访问;如果想让别的程序集访问,就需要public。   

  4  可以自己编写Assembly:新建类库,生成后就是一个dll,然后在别的项目中添加引用该dll即可,使用该dll类库中的定义的非internal类了。  

  5 托管代码:可以反编译出来的,最终编译生成MSIL。非托管代码:编译生成机器码。  

  6 GAC(全局程序集):

2)关于访问级别 

  1  子类的访问级别不能比父类的访问级别高。很明显,因为子类可以使用父类的成员。 

  2  public>internal>privare; 

  3  一个程序集内部可以访问的方法不能返回一个internal类对象;

3)关于委托(用于指向函数,限制了改函数的返回值类型和参数类型) 

  1  其作用就是:希望能够调用一个函数,但是写程序的时候不知道调用的是哪个函数,只要能传递参数,取出返回值就可以。     就好比是,多态的实现,只知道实现了改类的子类一定会有该方法,但是如何实现该方法,却是不知道的是哪个对象。  

  2 委托是一种类型,所以和class同级: 声明一个委托      

  delegate  类型  someDelegate(参数);   //声明一个委托类型someDelegate;      

  使用委托:  someDelegate  sd1=函数名; //定义了委托变量记住是委托指向了函数,并不是为委托调用函数。sd1=some1;sd1=some2;一个委托变量可以指向多个函数;    

   使用委托:  sd1(参数);  //这样此时才是真正的指向委托变量指向的函数。  

  3 总结:使用委托来约束函数类型,然后使用委托变量来使用被约束的函数。  

  4  使用案例:对集合数组进行过滤掉其中的奇数或者负数。   //思路:可以定义一个委托,该委托的参数是一个Int数,返回值时bool;至于如何对int数操作,不同的函数去实现不同的功能。这样要使用该委托时,就将此委托作为参数,然后将指向了功能函数的委托变量传递过去即可。

  5  所以,委托是多个函数的父类,也实现了多态。

4)关于事件:就是将委托类型作为一个class的字段使用;然后再该类的对象中,为该对象的委托字段,赋值,让其指向函数。  

  1  可以将一个委托变量指向多个函数,即将多个委托串联起来,即用一个委托变量加减多个委托。      

  someDelegate s1=new someDelegate()+new someDelegate();  

  2  用加减可以使委托实现多个功能同时进行,也即多个人同时监听。  

  3  但是将委托声明为类的public字段时,会发生消灭监听行为(Null)和假冒事件行为(执行)。    

  所以可将其声明为私有字段,然后提供一个add方法,只提供一个入口--就是参事就是委托类型,然后在函数内,将委托类型添加到私有字段中即可。        

  public  void AddSQ(SQDelegate d){onSQ+=d;}    

  简便写法: public  event SQDelegate onSQ { add{} remove{} };    

  所以事件的标准写法:event 委托类型 事件名{ add remove}  

  4  委托和事件的关系:事件就是让外界只能+=;-=;不能所以触发或者消灭委托。

5)避免命名重复的问题,可以使用委托变量指向一个匿名方法  

  //匿名方法: 对象名.事件名+=delegate(参数类型 参数名){方法体; }  ;调用:f(参数值);  

  //lamda表达式:  (参数名)=>{方法体}  ;  调用:  委托变量(参数值);

6)关于lamda表达式  

  1  如果lamda表达式中匿名函数的方法体如果只有一句话,并且是返回值,那么可以省略方法体的{},以及return,就把=>后的表达式作为返回值。  FilterDelegate  fd = (d) => d == "d";  

  2  知数组itme;求它大于零的数:item.Where(i=> i>0) ;可知 where中的条件是一个委托指向一个函数,该函数参数是int,返回值是bool;      static bool IsOK(int i){return i>0};  //即用lamda表达式实现匿名委托;  

  3  已知数组item,进行升序排序:item.OrderBy(i=> i);   降序排序:item.OrderBy(i=> -i);  

  4  已知数组item,求出乘以2后的结果;   item.Select(i=>i*2);  5  所以,总结--orderBy排序;select计算;where过滤

posted on 2011-06-21 10:36  M_ary  阅读(216)  评论(0)    收藏  举报