个人的一些技巧总结

1.在写加密类,压缩类等工具类时,因为这些工具比较通用,最好使用比特流作为数据来源和输出,即参数和return都是byte[] ,byte是最底层的信息编码方式,这样写比较通用。

2.在写加密等时,当字符串作为参数时,通过Base64String传输字符串比较稳定,当使用String时,容易发生错误。??

3.关于事件event,其实事件就是在相应的地方执行委托,事件就是委托,但是事件多了一个event关键字,其作用就是保证委托的执行调用在类内进行(俗称订阅,相当于私有,但是又可以公开以为他添加处理过程),在外部是不能调用的。

(普通委托如果设置为私有,则类外无法进行赋值,如果公有则类外可以通过实例可以直接调用该委托,而事件只想公开赋值部分,隐藏调用能力,为了解决这个问题使用event关键字,使其半公开)

其中注意:EventHandler相当于Action\Func\ 是给定的用于事件的委托类型,方便我们定义事件。  event相当于public\private\protect 表明该委托对象半公开(公开赋值,不公开调用)。

public event EventHandler Click;

(其实事件的实现机制和自动属性的实现机制类似   定义一个event ClickHandle Click;  编译后为先定义一个私有的委托实例,然后Click定义为公开set;protect get;  不过在事件中是add和remove

private delegate ClickHandler _click;

public Click{

add{ _click+=value; }

remove{_click-=value;}

}

)

//刚刚又明白一件事,事件的调用本质大概是可以按以上思路理解,但是对于事件的发布者和订阅者的概念原先理解的不够透着,有点模糊甚至颠倒了。

定义事件的地方,叫做事件的发布者(event Click),而接收通知的地方叫做订阅者,这个订阅者并不是触发这个事件(OnClick(s,e))的地方,而是我们需要触发这个事件后接收触发消息和参数的地方。

比如button1.Click+=()=>{...};此处叫做订阅者,因为当Click事件发生后,他会接到通知,然后他指定做出某些操作。

button1.Click+=(s,e)=>{};

button1.Click+=(s,e)=>{};

button1.Click+=(s,e)=>{};

为事件赋值的地方都是事件的订阅者,例如上面Click事件有三个订阅者,当事件发生时,他将事件触发的消息会告诉这三个订阅者,这三个订阅者,因为订阅了,所以才会得到通知,做出事件发生后的操作。

而事件触发,不是谁想触发就去调用Onclick方法这么简单的,触发操作OnClick在何处调用,这个是定义这个事件后,根据本事件的含义,来到指定的地方,触发。这个Onclick在该触发时调用,是事件机制的一部分,是定义事件后应该完成的,位置是根据事件含义指定的,他是事件机制、事件定义的一部分,而不是订阅者,整个事件的核心因此就成了为事件传方法的订阅者。Click+=...

class Car

{

pulic event EventHandle<CarInfo> CarArrive;

public void NewCar(string car)

{

     if(CarArrive!+=null)

     {

          carArrive(this,car);

     }

}

}

main()

{

Person p1=new Person("danny");

Person p2=new Person("Jerrny");

Person p3=new Person("Liming");

Car car=new Car();

car.CarArrive+=p1.CarArriveDo();

car.CarArrive+=p2.CarArriveDo();

car.CarArrive+=p3.CarArriveDo();

car.NewCar("ferrari");

}

如上所述,有三个人(danny\Jernny\Liming)订阅了有车到达这个事件,当NewCar被调用时,有新车到达,触发了CarArrive事件,然后这个事件被通知给三个订阅者。

Car是事件的发布者,三个Person是事件的订阅者。当事件发生时,触发事件通知给订阅者

http://blog.csdn.net/lulu_jiang/article/details/6451300 

 

4.写程序千万不要想着复制现成的代码,学着查文档、看文档(控件使用文档、类的属性方法列表),这样才能熟而生巧,掌握问题原理,最重要的是学会解决问题。

如果每次不会就百度现成代码,那碰到搜索不到的问题答案,那就不知所措了,所以,不 要 粘 代 码,学会解决问题的过程

 

5.学习东西也不是编代码越多越好,重要的是通过编写掌握它的原理及功用,如果掌握了这些,不必要去尝试熟练练习所有的东西,浪费时间,知道就可以。(比如Linq不必刻意练习所有语法,掌握原理、功用、并知道有哪些查询语法就可以)但是要花八 成 的 时 间 去 做 理 解练 习 ,熟   练  掌   握  原   理

6.拿到任务不要直接写代码,直接写是最花费时间的,容易出现设计问题和实现问题,甚至导致要反复推倒重写。先设计实现逻辑

,然后用原子程序验证知识点,最后动手,这样基本不会浪费多余的一点时间。

7.掌握一个新东西,从四个方面进行,分别考虑:功能(它能干什么)、原理(它是用什么技术原理实现的)、怎么用(它有哪些属性、方法分别作用是什么、这个东西可以实现哪些效果)、哪些场景用(以后在遇到哪些、哪类问题可以考虑本处)                         //回来补充:属性、方法、事件外,还有一个很重要的东西《特性Attribute》,在学习EF框架时,因为对insert特性默认为自增,走了不少弯路,在列的特性上应该手动设置为None,所以,掌握它有哪些特性、起到什么作用非常重要

8.为什么使用框架,框架可以减少硬编码,提高编程效率。比如Dapper\EF框架,通过使用实体映射,将使用sql的操作变成了对实体属性的操作,就类似于使用RTF格式文本编辑,如果要设置一个属性Aglin居中,将\gc插入文本,对应位置,会非常麻烦且容易出错,如果使用对应的框架和实体模型,那么只要改变属性Aglin就可以,减少许多麻烦。

9.属性的主要作用是用来暴露给调用者使用的,注意,不要习惯将属性变成全局变量的定义,多处使用到的可以通过传参调用来实现传参的,不要定义太多无用的属性

10.尽量少的new,因为创建实例是最耗费资源的,公共使用的东西,尽量保证只new一次,情况不同时,通过改变参数,保证参数改变后的有效应用,不必再次创建。例如在写页眉页脚修改时,外部只定义创建一次即可,通过赋参数,保证show的时候参数有效应用即可

11.吗卖批,一定要及时提交及时备份。这次做了次磁盘分区,然后,程序就坏了,又没有备份,还好提交了一部分,没提交的部分比较少

posted @ 2017-10-12 09:43  BaizLi  阅读(242)  评论(0编辑  收藏  举报