谈谈泛型和锁,一个值得注意的问题!
摘要:大家都知道用lock关键字指定的锁定对象必须是引用类型,如果我们这样写: class Program { static void Main(string[] args) { B b = new B(); lock (b) //error { } ...
阅读全文
posted @
2009-02-22 20:38
周雪峰
阅读(1677)
推荐(0) 编辑
C#l编译器是否会为值类型生成默认的构造函数!
摘要:C#编译器是否会为值类型生成默认的构造函数呢? 答案是否定的,C#编译器并不会为值生成默认的构造函数的,这样设计一方面是基于性能方面的考虑,另外一个原因是值类型可以被隐式的创建!这一点可以通过ILDasm工具开验证,值类型确实没有生成默认的构造函数,看下面的代码: class Program { static void Main(string[] args) ...
阅读全文
posted @
2009-02-21 17:06
周雪峰
阅读(2110)
推荐(0) 编辑
关于抽象类的构造函数!
摘要:大家都知道,抽象类是不可以实例化的,那么在抽象类中是否可以有构造函数呢? 很多初学者都有类似的疑问! 答案是肯定的,而且如果我们自己没有定义的话,编译器还会为我们生成一个默认的构造函数的,看这段代码: public abstract class MyAbstractClass { } 我们自己并没有自己定义构造函数,我们用ILDasm工具来看看生成的IL代码: .m...
阅读全文
posted @
2009-02-20 14:59
周雪峰
阅读(5951)
推荐(1) 编辑
关于++运算符重载的一个问题,有点“饶”!
摘要:问题起源于下面这段有问题的代码: class Program { static void Main(string[] args) { Distance a = new Distance(5.3); Distance b = a++; Console.WriteLine("b.Mea...
阅读全文
posted @
2009-02-19 13:43
周雪峰
阅读(1766)
推荐(0) 编辑
在嵌套类中是否可以触发外部类中定义的事件!
摘要:大家都知道,只有在定义事件的类中才能触发事件。 今天看到一个资料上说就是在定义事件的类的嵌套类中也不能触发事件!为了搞清楚原因,我进行了如下测试: class Program { static void Main(string[] args) { MyClass.Test t = new MyClass.Test(); ...
阅读全文
posted @
2009-02-18 15:01
周雪峰
阅读(1418)
推荐(0) 编辑
谈谈C#的私有成员的一个有趣的现象!
摘要:大家都知道,一个类的私有成员只能在他的内部访问! 但是不知道大家注意到没有,实际上在C#中一个类的实例是可以访问同一个类的另外一个实例的私有成员的。 请看这段简单的代码 public class MyClass { private int i = 0; public void Function() { ...
阅读全文
posted @
2009-02-18 14:22
周雪峰
阅读(2740)
推荐(2) 编辑
C#中对byte类型的处理。
摘要:可能很多人都没有注意到,C#中对byte类型的处理还是很特殊的。 下面我用几行简单的代码来说明问题 byte x=1; byte y=2; byte z=x+y; //error:无法将int类型转换为byte类型 可能很多人会认为这段代码没有问题,实际上第三行会产生编译错误:无法将int类型转换为byte类型! 这是为什么呢?因为C#编译器会认为byte类型和byte类型运算的结果是in...
阅读全文
posted @
2009-02-17 14:24
周雪峰
阅读(4491)
推荐(2) 编辑
关于循环引用!
摘要:什么是循环引用呢? 举个例子更容易说明这个问题: class Program { static void Main(string[] args) { B b = new B(); } } public class A { public B b=new B(); ...
阅读全文
posted @
2009-02-16 14:37
周雪峰
阅读(661)
推荐(0) 编辑
谈谈常数字段!
摘要:一般定义常数字段使用const关键字,但是从某种意义上,readonly字段也属于常数字段,但是他的要求比const要“宽松”些。 下面分别说说这两种关键字定义的常数字段: 1,const关键字定义的常数字段: const定义的常数字段只能在声明字段的地方进行初始化,初始化后就不能修改了: 而且,如果是const字段的类型是引用类型,那么只能用null对引用类型的常量进行初...
阅读全文
posted @
2009-02-16 14:13
周雪峰
阅读(293)
推荐(0) 编辑
谈谈DivideByZeroException异常!并非像表面那么简单!
摘要:看到这个标题大家可能又会说了,这个异常“地球人”都知道,你试图除以0的时候就会产生这个异常,实在没有讨论的必要啊! 实际上这个异常,还是有很多值得注意的地方的,下面用几个例子来说明问题! 1, int i = 5; int j = i/ 0; Console.WriteLine(j); 大家可能认为会引发DivideByZeroExce...
阅读全文
posted @
2009-02-13 13:33
周雪峰
阅读(806)
推荐(0) 编辑
接口类型是否继承于System.Object的讨论?
摘要:由于最近比较忙,好久没有来这里写东西了,以后会常常来这里记录一些自己的心得和体会的。 看到标题可能很多人也会比较疑惑,认为这个根本没有必要讨论,而且认为这个问题也比较无聊。 实际上我也是今天才注意到这个问题的,不知道大家想过这个问题没有? 我一开始遇到这个问题是一个初学编程的同行提出的,他的想法是借口类型似乎应该继承于System.Object,毕竟System.Object是所有.NET中所有...
阅读全文
posted @
2009-02-12 12:59
周雪峰
阅读(612)
推荐(0) 编辑