接口和抽象类,值类型和引用类型,委托,反射,装箱和拆箱
接口和抽象类的区别
相同点: 1.都不能被直接实例化,都可以通过继承实现其抽象方法
不同点:
1.接口可以多继承,抽象类只能单继承
2.接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。
3.接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。
4.接口可以用于支持回调;抽象类不能实现回调,因为继承不支持
5.接口可以作用于值类型和引用类型;抽象类只能作用于引用类型
6.抽象类可以继承接口,反过来不行
详细点看看这里http://www.cnblogs.com/anytao/archive/2007/04/12/must_net_02.html
值类型和引用类型区别
1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址。
2. 值类型存取速度快,引用类型存取速度慢。
3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用
4. 值类型继承自System.ValueType,引用类型继承自System.Object
5. 栈的内存分配是自动释放;而堆在.NET中会有GC来释放
C#中基本数据类型是值类型,结构也是值类型。而数组、类、接口、字符串都是引用类型
详细点看看这里http://www.cnblogs.com/Autumoon/archive/2008/08/18/1270685.html
详细点看看这里http://www.cnblogs.com/JimmyZhang/archive/2008/01/31/1059383.html
什么是委托
委托可以把一个方法作为参数代入另一个方法。委托可以理解为指向一个函数的引用
详细点看看这里http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html
什么是反射
动态获取程序集信息。
程序集包含模块,而模块又包括类型,类型下有成员,反射就是管理程序集,模块,类型的对象,它能够动态的创建类型的实例,设置现有对象的类型或者获取现有对象的类型,能调用类型的方法和访问类型的字段属性。它是在运行时创建和使用类型实例
什么是装箱和拆箱
从值类型接口转换到引用类型装箱。从引用类型转换到值类型拆箱。