摘要:
readonly代表着只读,const代表着不变, 在讲readonly 与const的区别之前,先讲只读与不变的区别。只读说明不能写,但并不意味着不变,不变代表着常数,永远不会变化,好像是废话。举例来说,一个人的真实出生日期是不变的。当这个人注册邮箱,填写个人的信息时,年龄一项是只读的,系统会根据该人的出生日期自动计算出年龄,不允许用户修改年龄。但这并不意味着年龄不会变化,去年25岁,今年肯定要显示26岁。readonly的使用场景:只能修饰field,编译期知道字段是只读的,不允许再次赋值。但field的值有可能在运行期才确定下来,比如下面的代码:private readonly Date 阅读全文
摘要:
先进行细分:类的成员分为:字段、属性、方法、构造方法成员的修饰符:静态成员、实例成员层次结构:父类、子类先不考虑继承关系,执行顺序为:静态字段静态构造方法实例字段实例构造方法属性和方法是在调用的时候才执行,这里就不考虑了。如何理解上面的执行过程?假如让我来设计执行过程,我该如何考虑,依据是什么?首先,静态的东西是大家共享的,也就是相同的。应该先关心共享的东西,再关系个人的东西。“先公后私”,呵呵。其次,实例化之前,应该先初始化自己的内部数据。现在考虑继承关系,执行顺序为:子类的静态字段子类的静态构造方法子类的实例字段父类的静态字段父类的静态构造方法父类的实例字段父类的实例构造方法子类的实例构造 阅读全文
摘要:
先举典型的例子,单例模式。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 ... 阅读全文
摘要:
自己从Java 转向C#,习惯了Java中的Property +set/get 方法。在C#中,采用private field + public Property,当然在C#3.5 的新特性中,已经增加了Automatically Implemented Property,不用再写private field。仔细想想,C#的做法更符合编程思维。为什么?首先,属性是对象本身具有的,访问对象的属性应该是访问者的动作,而不应该是对象的动作。其次,方法代表着“可以做什么事”,访问属性不应该采用方法。 阅读全文
摘要:
volatile的使用场景:多个线程同时访问一个变量,CLR为了效率,允许每个线程进行本地缓存,这就导致了变量的不一致性。volatile就是为了解决这个问题,volatile修饰的变量,不允许线程进行本地缓存,每个线程的读写都是直接操作在共享内存上,这就保证了变量始终具有一致性。缺点很明显:牺牲了效率。lock的使用场景:多个线程同时访问一个代码块,使用lock 修饰该代码块,强制多个线程进行排队,一个接一个的去访问。缺点很明显:排队进行必然导致效率低。系统中应该尽量减少lock的使用(也就是排队执行的情况),因为根据阿姆达尔定律:S=1/(a+(1-a)/n) ,其中S 为加速比,a 为串 阅读全文
摘要:
UIElement 的DesiredSize 和 RenderSize的区别如下:DesiredSize:元素在布局过程中,根据相关属性测量处理的大小,是只读的。RenderSize:元素在布局完成后,最终Render的大小,是可以读写的。 阅读全文
摘要:
在WPF中,控件有Width 和 ActualWidth两个属性,二者的区别如下:Width:是我们期望控件应有的宽度,是可读写的,可在xaml文件中设置,也可在程序中设置。如果没有设置,Width的值为NaN(Not a Number)ActualWidth:是控件Render的实际宽度,控件Render之前,它的值为0,。该属性是只读的。 阅读全文