06 2011 档案

摘要:主要内容类型的转换构造器显式/隐式的转换操作符1. 类型的转换构造器类型转换构造器是指 通过一种类型(比如Type1)的实例来构造另一种类型(比如Type2)的实例。一般用于:1) Type1和Type2之间没有继承关系,但是仍然希望从Type1转换到Type22) Type1和Type2是完全不同的两种类型使用方法如下:using System;namespace cnblog_bowen{ public class CLRviaCSharp_8 { static void Main(string[] args) { Type1 t1 = new Type1(10); t1.Show(); 阅读全文
posted @ 2011-06-30 09:42 wang_yb 阅读(558) 评论(0) 推荐(1) 编辑
摘要:C#中经常用const或者readonly来定义不可改变常量,那么如何使用它们呢?主要内容:const和readonly的区别 readonly的补充说明 1. const和readonly的区别主要的区别在于 const是在编译时确定值的,readonly是在运行时确定值的。因此,用const修饰的字段,必须在定义的时候就赋值,否则编译器报错。而readonly修饰的字段除了可以在定义时赋值以外,还可以在构造函数中赋值。验证的代码如下:using System;namespace Test7{ public class CLRviaCSharp_7 { const string cValue 阅读全文
posted @ 2011-06-29 08:59 wang_yb 阅读(653) 评论(0) 推荐(2) 编辑
摘要:C#中调用一个函数时生成的IL代码有两种形式,分别为call 和 callvirt。主要内容call和callvirt的区别call和callvirt的例子1. call和callvirt的区别call的callvirt的区别主要有两点:1)call可以调用静态方法,实例方法和虚方法 callvirt只能调用实例方法和虚方法,不能调用静态方法2)call一般是以非虚的方式来调用函数的 callvirt是以已多态的方式来调用函数的2. call和callvirt的例子示例代码如下:using System;namespace Test6{ public class CLRviaCSharp_6 阅读全文
posted @ 2011-06-28 15:24 wang_yb 阅读(3999) 评论(0) 推荐(1) 编辑
摘要:一直以为像C#这种内存自动回收的语言,开发人员无法操作其在内存的布局。现在才知道,CLR也提供了相应的接口,让我们可以更细粒度的对代码进行控制。主要内容C#中控制内存布局的Attribute模拟C#中的Union类型1. C#中控制内存布局的Attribute为了控制自己定义的类或结构在内存中的布局,CLR提供了System.Runtime.InteropServices.StructLayoutAtrribute这个Attribute。这个Attribute的构造器中提供了3种Layout:1)LayoutKind.Auto : 由CLR自动排列字段2)LayoutKind.Explicit 阅读全文
posted @ 2011-06-20 08:50 wang_yb 阅读(982) 评论(0) 推荐(0) 编辑
摘要:在C#中,除了可以在类的构造函数中初始化私有字段的值,还可以在私有字段定义的地方进行初始化(即默认赋值)。下面讨论默认赋值和在构造函数中赋值的区别,以便更好的在代码中使用这两种赋值。主要内容:对代码生成的影响对代码执行的影响1. 对代码生成的影响首先构造两个Class,其中ClassA使用默认赋值的方式,ClassB使用构造函数赋值的方式。代码如下: public class ClassA { private Int32 a = 123; private String b = "abc"; private Object c = new object(); public Cl 阅读全文
posted @ 2011-06-17 16:44 wang_yb 阅读(1360) 评论(3) 推荐(3) 编辑