2012年1月17日
摘要:
1、C# 是纯OO语言,Object 是所有类型的根。2、Object 建立了一个分支ValueType,ValueType继承Object,本身是class,是引用类型。3、ValueType 是所有值类型的根,值类型包括结构和枚举类型,结构包括BCL的结构(基础类型)和自定义的结构。4、所有的结构直接继承ValueType,并且是隐式的继承。4、枚举类型间接继承ValueType,枚举类型直接继承Enum,Enum继承ValueType,Enum是class,是引用类型。也就是说,Enum和枚举类型不是同一个概念,可以认为枚举类型是Enum的子类,隐式继承。5、引用类型包括类、接口、委托、
阅读全文
posted @ 2012-01-17 17:23
Andy Niu
阅读(284)
推荐(0)
摘要:
以C#为例说明,1、C# 源代码经过C# Compiler 生成托管模块(中间语言和元数据),其中元数据描述了源代码中定义的类型和成员,以及源代码引用的类型和成员。2、多个托管代码和资源文件经过AL.exe(程序集链接器),生成程序集(exe,dll文件)。3、JIT(just-in-time)将程序集中的IL生成本地机器指令,然后执行。可以认为,程序集包含了中间语言,是对中间语言和其他信息的封装。使用ildasm.exe 可以对程序集拆箱,读取其中的IL;使用ilasm.exe 可以对IL进行封装,生成程序集。Reflector.exe 可以将程序集中的IL转换为C#源码,方便用户查看。NG
阅读全文
posted @ 2012-01-17 11:33
Andy Niu
阅读(540)
推荐(0)
摘要:
个人理解,自包含:组件不依赖其他组件,能够以独立的方式供外部使用。自描述:当前组件包含了自身与其他组件交互相关的描述信息,不需要其他的配置文件或者额外信息来描述。
阅读全文
posted @ 2012-01-17 10:43
Andy Niu
阅读(4684)
推荐(1)
2012年1月16日
摘要:
字段的使用场景:与类或者对象关系密切,建议使用private修饰。属性的使用场景:对字段进行封装,提供get/set关键字,进行访问。变量的使用场景:与类或者对象关系不密切,常常在方法或者语句块中使用。字段和属性是相对于类而言的,而变量相对于方法或者语句块而言,可以再任何地方使用。注:在Java当中,没有字段的概念。Java采用 property+get/set方法,C#中采用 private field+public property,C#的做法更合理,因为获取对象的数据,应该是访问者的动作,而不应该是对象的动作。Java的做法不符合编程思想。
阅读全文
posted @ 2012-01-16 16:51
Andy Niu
阅读(451)
推荐(0)
2012年1月13日
摘要:
先看代码:View Code 1 class Program 2 { 3 static void Main() 4 { 5 Func<int, bool> func1 = new Func<int, bool>(isPositive); 6 7 Func<int, bool> func2 = isPositive; 8 9 int b = 5;10 Func<int, bool> func3 = delegate(int a)11 ...
阅读全文
posted @ 2012-01-13 10:34
Andy Niu
阅读(221)
推荐(0)
2012年1月12日
摘要:
闭包的使用场景:想把一些行为封装起来,这些行为依赖当前上下文的数据,而你不想重建一个方法,并且传递参数。这时候可以使用闭包。在C#中,闭包主要是通过匿名方法来体现的。闭包的优点:1、直接传递上下文数据,不需要传递。2、延迟初始化器闭包的缺点:破坏了封装性,也就是说,使用了本不属于自己的东西。
阅读全文
posted @ 2012-01-12 17:05
Andy Niu
阅读(214)
推荐(0)
摘要:
数据结构中栈的典型应用有:1、表达式计算,包括两个过程:中缀表达式变为后缀表达式 和 后缀表达式的计算2、数制的转换3、前进后退功能感想:很多情况下,我们常常要增加功能,但有时候我们要减少功能。Stack 的内部实现是数组或者链表等,Stack其实是去除了数组或者链表的部分功能,只保留对栈顶的操作。同样的道理,string 是char数组,应该允许修改string,而不是重新创建新的string。但是设计者们为了函数式编程,将string 设计为不可变字符串,也就是说,去除了string 修改的功能。
阅读全文
posted @ 2012-01-12 16:26
Andy Niu
阅读(390)
推荐(0)
2012年1月11日
摘要:
C#中的String是引用类型和值类型的综合体,兼有二者的特点。1、String 是类,是引用类型,在堆上分配内存。为什么要把String设计为class ,因为String要处理比较多的业务逻辑,比如大小写转换,拆分字符串等。2、String 是不可变字符串。按理说,string是引用类型,在赋值或者调用方法传递参数的时候,是“复制引用”,对引用的值进行修改,应该产生副作用。但实际情况并非如此。请看下面的代码。View Code 1 class Program2 {3 static void Main()4 {5 string...
阅读全文
posted @ 2012-01-11 13:32
Andy Niu
阅读(723)
推荐(0)
摘要:
1、使用场景装箱的使用场景:想把值类型当做引用类型来使用,于是把值类型转换为引用类型。拆箱的使用场景:想把引用类型当做值类型来使用,于是把引用类型转化为值类型。再进一步,为什么想把值类型当做引用类型来使用? 比如:方法定义时接受Object 类型的参数,而你想传递int 类型,此时需要把int装箱为Object;对于一些非泛型的容器,为了保证通用,元素类型定义为Object,此时向容器内添加int,double的时候,需要装箱。为什么想把引用类型当做值类型来使用呢?对于值类型装箱后的引用类型,你想直接使用值类型的数据。2、实现原理装箱:(1)在堆上分配一块内存,该内存就是一个实例(2)将值类型
阅读全文
posted @ 2012-01-11 13:06
Andy Niu
阅读(435)
推荐(0)
2012年1月10日
摘要:
先看MSDN上对CTS 中的值类型和引用类型之间的关系的介绍:1、Object是所有类型的根,类型分为:值类型和引用类型。2、ValueType 是所有值类型的根(结构是隐式继承ValueType),值类型分为:结构和枚举。结构包括:BCL中的结构(也就是基础类型Primitive Type)和自定义的结构。3、ValueType 继承Object,ValueType本身是个class(引用类型),而ValueType的子类(结构和枚举)都是值类型,ValueType重写了Object的Equals方法,将引用的比较转化为引用内容的比较。4、所有的值类型都是sealed
阅读全文
posted @ 2012-01-10 16:36
Andy Niu
阅读(214)
推荐(0)