随笔 - 576  文章 - 0  评论 - 62  阅读 - 219万
12 2011 档案
C# 异常处理
摘要:异常可以认为是:成员没有完成,他声称可以完成的任务。成员没有完成他声称可以完成的任务,并不一定是该成员自身的原因,也有可能是其他的原因导致的。比如:该成员调用的其他成员有问题,或者给该成员的数据输入有问题,导致该成员不能完成任务。异常处理方式就是try{}catch{]finally{},try{}包含可能出现问题的代码,catch{} 对可能出现的问题进行捕捉,finally{} 不管有没有问题最后都要执行。一个try{}对应多个catch{},catch{}的设计理念是,找到第一个匹配的,而不是找到一个最匹配的。因此,当找到第一个匹配的时候,将跳过后面所有的catch{}。根据这个特点,c 阅读全文
posted @ 2011-12-31 17:04 Andy Niu 阅读(507) 评论(0) 推荐(0) 编辑
局部变量与全局变量
摘要:根据C语言的说法,局部变量:定义在方法内部的变量叫局部变量;全局变量:定义在方法外部的变量叫全局变量。局部变量和全局变量的主要区别在于二者的生存周期不同。全局变量的生存周期:静态分配内存,程序运行期间常驻内存,直到程序运行结束。局部变量的生存周期:动态分配内存,位于线程堆栈中。另外全局变量和局部变量的作用域不同,举例来说,类中的变量作用域在当前类中,类方法中的变量作用域在当前方法中。全局变量的使用场景:多个地方需要使用,大家共享。局部变量的使用场景:只在当前这个地方使用。在项目开发中,尽量少使用全局变量(准确地说,应该是尽量缩小变量的作用域)。为什么尽量少使用全局变量?首先,不符合高内聚、低耦 阅读全文
posted @ 2011-12-31 16:24 Andy Niu 阅读(1557) 评论(0) 推荐(0) 编辑
删除集合中满足条件的元素
摘要:1、首先,遍历集合不能采用foreach的方式,因为foreach in 不能在原集合中添加和删除元素。至于为什么,涉及到foreach的实现原理。2、只能使用for 遍历,删除满足条件的元素。需要注意的是,在使用for 遍历过程中,删除一个元素,集合发生两处变化:集合的大小减1;右边的元素整体向左移动一位。为了不漏掉元素,当前遍历位置应该向左后退一步。3、采用笨办法,先把集合的元素copy一份,使用foreach遍历copy集合,从原集合中删除元素。foreach是个语法糖,使用foreach遍历的集合,实现了IEnumerable 接口,该接口中有个方法GetIEnumerator,返回I 阅读全文
posted @ 2011-12-31 15:12 Andy Niu 阅读(1798) 评论(0) 推荐(0) 编辑
C# readonly 与 const
摘要:readonly代表着只读,const代表着不变, 在讲readonly 与const的区别之前,先讲只读与不变的区别。只读说明不能写,但并不意味着不变,不变代表着常数,永远不会变化,好像是废话。举例来说,一个人的真实出生日期是不变的。当这个人注册邮箱,填写个人的信息时,年龄一项是只读的,系统会根据该人的出生日期自动计算出年龄,不允许用户修改年龄。但这并不意味着年龄不会变化,去年25岁,今年肯定要显示26岁。readonly的使用场景:只能修饰field,编译期知道字段是只读的,不允许再次赋值。但field的值有可能在运行期才确定下来,比如下面的代码:private readonly Date 阅读全文
posted @ 2011-12-29 20:14 Andy Niu 阅读(324) 评论(0) 推荐(0) 编辑
C# 实例化类的执行顺序
摘要:先进行细分:类的成员分为:字段、属性、方法、构造方法成员的修饰符:静态成员、实例成员层次结构:父类、子类先不考虑继承关系,执行顺序为:静态字段静态构造方法实例字段实例构造方法属性和方法是在调用的时候才执行,这里就不考虑了。如何理解上面的执行过程?假如让我来设计执行过程,我该如何考虑,依据是什么?首先,静态的东西是大家共享的,也就是相同的。应该先关心共享的东西,再关系个人的东西。“先公后私”,呵呵。其次,实例化之前,应该先初始化自己的内部数据。现在考虑继承关系,执行顺序为:子类的静态字段子类的静态构造方法子类的实例字段父类的静态字段父类的静态构造方法父类的实例字段父类的实例构造方法子类的实例构造 阅读全文
posted @ 2011-12-29 16:59 Andy Niu 阅读(8716) 评论(6) 推荐(8) 编辑
双重检查加锁机制
摘要:先举典型的例子,单例模式。View Code 1 public sealed class Singleton 2 { 3 private Singleton(){} 4 private static Singleton instance = null; 5 private static object syncRoot = new object(); 6 7 public static Singleton Instance 8 { 9 get10 {11 ... 阅读全文
posted @ 2011-12-29 15:23 Andy Niu 阅读(6875) 评论(2) 推荐(1) 编辑
C# 中的Property
摘要:自己从Java 转向C#,习惯了Java中的Property +set/get 方法。在C#中,采用private field + public Property,当然在C#3.5 的新特性中,已经增加了Automatically Implemented Property,不用再写private field。仔细想想,C#的做法更符合编程思维。为什么?首先,属性是对象本身具有的,访问对象的属性应该是访问者的动作,而不应该是对象的动作。其次,方法代表着“可以做什么事”,访问属性不应该采用方法。 阅读全文
posted @ 2011-12-29 14:09 Andy Niu 阅读(2422) 评论(0) 推荐(0) 编辑
C# volatile 与 lock
摘要:volatile的使用场景:多个线程同时访问一个变量,CLR为了效率,允许每个线程进行本地缓存,这就导致了变量的不一致性。volatile就是为了解决这个问题,volatile修饰的变量,不允许线程进行本地缓存,每个线程的读写都是直接操作在共享内存上,这就保证了变量始终具有一致性。缺点很明显:牺牲了效率。lock的使用场景:多个线程同时访问一个代码块,使用lock 修饰该代码块,强制多个线程进行排队,一个接一个的去访问。缺点很明显:排队进行必然导致效率低。系统中应该尽量减少lock的使用(也就是排队执行的情况),因为根据阿姆达尔定律:S=1/(a+(1-a)/n) ,其中S 为加速比,a 为串 阅读全文
posted @ 2011-12-29 12:07 Andy Niu 阅读(2588) 评论(2) 推荐(1) 编辑
UIElement 的DesiredSize 和 RenderSize
摘要:UIElement 的DesiredSize 和 RenderSize的区别如下:DesiredSize:元素在布局过程中,根据相关属性测量处理的大小,是只读的。RenderSize:元素在布局完成后,最终Render的大小,是可以读写的。 阅读全文
posted @ 2011-12-29 11:35 Andy Niu 阅读(1562) 评论(0) 推荐(0) 编辑
WPF 中的Width 与 ActualWidth
摘要:在WPF中,控件有Width 和 ActualWidth两个属性,二者的区别如下:Width:是我们期望控件应有的宽度,是可读写的,可在xaml文件中设置,也可在程序中设置。如果没有设置,Width的值为NaN(Not a Number)ActualWidth:是控件Render的实际宽度,控件Render之前,它的值为0,。该属性是只读的。 阅读全文
posted @ 2011-12-29 11:09 Andy Niu 阅读(9048) 评论(0) 推荐(1) 编辑
面试时遇到上机编程题
摘要:结合自己的真实经历,进行归纳总结。面试的时候,Interviewer 有时候会让Candidate 做一道上机编程题,大部分情况下,这类编程题都比较简单。试想一下,Interviewer给出一个需要几个小时才能完成的编程题,那么这一环节占用时间也太长了。但是,编程题简单也能考察出很多技能。很多Candidate(包括我自己),拿到编程题,不经过分析,心想快点完成。给Interviewer 留下这样的印象:自己的工作效率很高。完成后,马上交给Interviewer,心里还天真地以为,Interviewer 会对自己的表现满意。殊不知,Interviewer 已经把自己Refuse了。编程题再简单 阅读全文
posted @ 2011-12-28 10:15 Andy Niu 阅读(559) 评论(0) 推荐(0) 编辑
checked、unchecked
摘要:使用场景:代码块中可能会发生溢出,比如 byte b =255; b++;解决办法:使用checked标记代码块,告诉CLR 进行溢出检查,如checked{b++;}使用unchecked标记代码块,告诉CLR不要进行溢出检查,如unchecked{b++;} 阅读全文
posted @ 2011-12-27 15:53 Andy Niu 阅读(350) 评论(1) 推荐(1) 编辑
可空值类型
摘要:使用场景:1、比如使用Int32 来表示数据库字段的类型,数据库字段在某个记录上可以为Null,而Int32 不能为Null,产生问题。2、Java中的 java.util.Date 是引用类型,而CLR 中的System.DateTime 是值类型,当Java中的日期变量为Null,传递给C#时,C#无法解析。解决办法:使用?表示值类型可以为空,如 Int32? x =null;空接合操作符(??):Int32? x = a?? 1; ??操作符表示 a 不为null,返回a,否则返回1实际上 ?? 是 ?: 的语法糖,上面的代码等价于 Int32? x = (a==null)? a : 1 阅读全文
posted @ 2011-12-27 13:44 Andy Niu 阅读(572) 评论(0) 推荐(0) 编辑
语法糖
摘要:语法糖 是计算机语言中的一种语法,语法糖并没有为计算机语言添加新的功能,而是对已有的功能进行了封装,提供给用户更好的编程方式和编码风格。举例来说,C语言中的a[i] 表示*(a+i),在C#语言中,语法糖更多,比如下面的代码:View Code 1 public class Person 2 { 3 // Automticall Implemented Property (自动实现的属性) 4 public string Name { get; set; } 5 public int Age { get; set; } 6 ... 阅读全文
posted @ 2011-12-27 12:17 Andy Niu 阅读(3766) 评论(2) 推荐(2) 编辑

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示