2013年9月7日
摘要:
解决的问题:界面上有一些计时器控件(每个控件都有自己的Number),每个计时器每秒钟减1,当为0的时候消失;解决方法:1、建立接口ICount,有个Count方法;2、计时器控件实现接口ICount;3、建立CountManager类,统一管理这些计时器控件,使用Attach,Detach方法增加删除计时器控件;4、CountManager初始化一个计时器,每秒执行一次,遍历计时器控件,每个减1。注意事项:在foreach的语句中,不能对集合增删元素,也不能使元素指向其他对象,可以修改元素的内容。在这里遍历计时器控件的时候,考虑到其他线程会对集合增删元素,或者使元素指向其他对象,foreac
阅读全文
posted @ 2013-09-07 16:31
Andy Niu
阅读(338)
推荐(0)
2012年12月31日
摘要:
细分出这些关系,是因为他们针对不同的使用场景,分别介绍他们的使用场景。依赖:类A使用类B,但是这种使用关系只是偶然的、临时的,比如张三写字的时候,需要借助铅笔,此时就是依赖关系,当然张三也可以使用圆珠笔,钢笔。也就是说,依赖关系比较弱。体现在代码层面上,就是类B以方法参数的方式,传递给类A,类A在方法内部使用。举例来说,Observer模式中,在拉模式中,Observer没有字段指向Subject(可以理解,字段是相对于类而言的,变量是相对于方法而言的,方法内的临时变量),而是Subject以方法参数的形式,传递给Observer,Observer获取Subject的信息。依赖的语义:use
阅读全文
posted @ 2012-12-31 11:55
Andy Niu
阅读(295)
推荐(0)
2012年12月27日
摘要:
举例来说:程序员做蛋糕,可以分为以下几个线程:添加水,添加面粉,混合原料。添加水和添加面粉可以异步,因为二者没有先后顺序。添加水和混合原料,添加面粉和混合原料必须同步(这里假定必须水和面粉添加好了,才能混合原料)。假设只有程序员一个人,一会添加水,一会添加面粉,会降低效率(频繁地切换上下文),最好的做法是把水添加好了,再添加面粉,但是这不符合实际情况。程序员不能同时添加水和添加面粉,增加一个人可以显著提高效率。也就是说,对于异步的情况,可以增加CPU提高执行速度。但是对于同步的情况,增加CPU不起作用,因为有再多的CPU的也没用,必须等待前一个步骤完成。可以异步的情况:两个步骤没有先后顺序,可
阅读全文
posted @ 2012-12-27 16:48
Andy Niu
阅读(261)
推荐(0)
摘要:
引用:http://www.cnblogs.com/yuilin/archive/2012/11/05/2755298.html首先简单介绍一下TCP三次握手 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack
阅读全文
posted @ 2012-12-27 16:00
Andy Niu
阅读(249)
推荐(0)
摘要:
词法:什么样的词是有效的。语法:有效的词进行排列组合,什么样的排列组合才是有效的。语义:描述的内容是否正确。举例来说:雪是White:词法错误,White不是有效的中文词。词法正确才能进行语法分析。雪白的是:词法正确,语法错误。雪、白的、是,都是有效的中文词,但是词的排列组合错误。雪是红的:词法正确,语法正确,语义错误,描述的内容错误。计算机能够进行词法、语法分析,但是很难进行语义分析。
阅读全文
posted @ 2012-12-27 15:51
Andy Niu
阅读(543)
推荐(1)
2012年10月27日
摘要:
点击一下Button,实际上是先执行OnClick方法,但是问什么,同时还出发了Click事件呢?这是因为,OnClick方法内部触发了Click事件。
阅读全文
posted @ 2012-10-27 11:12
Andy Niu
阅读(1615)
推荐(0)
摘要:
解决问题:在调用方法的时候,值类型是整体拷贝,引用类型是复制引用,因此在被调用方法中,修改引用对象的内容,在调用方法中会体现修改的结果。但是如果在被调用方法中,修改引用使其指向另一个对象,在调用方法中不会体现出修改的结果。ref与out就是解决这个问题的。使用场景:ref 调用方法的时候,参数必须初始化;out在被调用方法中,参数被清空,指向Null
阅读全文
posted @ 2012-10-27 11:07
Andy Niu
阅读(199)
推荐(0)
摘要:
解决的问题:一个控件可能有几百个CLR属性,如果每个CLR属性都是包装一个字段,那么这个控件耗费的内存太大了。依赖属性就是解决这个问题的。如何解决这个问题:使控件的CLR属性不是包装字段,而是包装一个DependencyProperty,并且这个DependencyProperty的内存不是分配在控件内,而是采用某种机制分配在外部,以key-value的形式存在。另外,DependencyProperty还解决了一个问题,当DependencyProperty作为绑定源的时候,还能自动更新绑定目标的显示。依赖属性的理解:1、依赖属性就是可以自己没有值,通过binding 从数据源获得值的属性,
阅读全文
posted @ 2012-10-27 10:50
Andy Niu
阅读(1724)
推荐(0)
摘要:
1、从语义上讲,静态成员对类有意义,类和所有实例共享。实例成员对实例有意义,每个实例都有专属于自己的。如何理解?举例来说,Person类的Age应该是实例成员,每个Person实例都有自己的Age,而MaxAge(年龄的最大极限,比如说200岁),应该是静态成员,因为MaxAge对于人类(包括所有人)有意义,也就是说,所有人的年龄最大极限都是200岁。2、从内存分配上看,成员分为字段和方法(C#当中的属性是一种特殊的方法,其本质上也是方法),对于静态字段,在内存中只有一份拷贝,类与所有实例共享。对于实例字段,每个实例都有一个拷贝。而对于方法,不论是静态方法还是实例方法,在内存中都只有一个拷贝,
阅读全文
posted @ 2012-10-27 10:34
Andy Niu
阅读(303)
推荐(0)
2012年10月20日
摘要:
所有软件的本质都是增删改查和数据可视化。要解决的问题:数据可视化,UI显示数据,数据与UI一致,数据变化,对应的UI更新。举例来说,使用Label显示Person的Name,Label的Content与Person的Name一致,Person的Name发生变化,Label的Content也随之变化。最笨的方法是,每次修改Person的Name的时候,同时去修改Label的Content。那么问题就来了,有没有简单的办法,把Label的Content与Person的Name绑定起来,每次修改Person的Name,通过一种机制自动更新Label的Content,这既是要解决的问题。如何解决问题:
阅读全文
posted @ 2012-10-20 10:22
Andy Niu
阅读(309)
推荐(0)