1.C#的基本数据类型:
 C#基本数据类型包括13种值类型和2种引用类型;13种值类型有8种整数型:sbyte(8位)、byte(8位)、short(16位)、ushort(16位)、int(32位)、uint(32位)、long(64位)、ulong(64位),2种浮点型:float(32位)、double(64位),十进制浮点型decimal(128位),字符char,布尔类型bool。2种引用类型有String、 。
 C#值类型和引用类型分别包括:值类型包括简单类型、枚举、结构体;引用类型包括String、 、类、接口、数组、委托

 值类型与引用类型的区别:
 1.值类型存储在内存的栈上面,引用类型存储到内存的托管堆上。
 2.值类型的变量存储的是变量的值,引用类型的变量存储的是地址的引用。
 3.值类型默认构造器初始化为0,引用类型默认初始化为null。
 4.继承,值类型不能派生出其他类型,所有的值类型均派生自System.ValueType,但引用类型可以继承,如类、接口、委托

 值类型和引用类型的生命周期:
 值类型的生命周期随作用域结束被释放,引用类型受垃圾回收器控制;

2.class和struct
 class是引用类型,struct是值类型;struct不支持无参构造函数,不支持析构函数,并且不能有protected修饰符;class需要new关键字实例化对象,结构可以不用new关键字;class可以为抽象类,struct不支持抽象。

3.抽象类和接口
 1.继承:接口支持多继承,抽象类只能单继承。
 2.含义:接口用于规范,强调契约;抽象类用于共性,强调父子。
 3.方法实现:抽象类中的方法,既可以给出实现,也可以不给出实现,抽象类的抽象方法只能声明不能实
 现,接口中的方法不能给出实现。
 4.子类重写,继承类对于抽象类定义的抽象方法,可以不用重写,但继承类必须也为抽象,而对于接口所定
 义的方法和属性,继承类必须重写,给出相应的方法和属性实现

4.stack和heap的区别
线程堆栈:简称栈 stack;托管堆:简称堆 heap
栈是CPU资源分配和调用的单位,堆是系统资源分配和调用的单位;
值类型分配在栈上,引用类型分配到堆上;
栈是基于线程的,每个线程都有自己的线程栈,初始大小为1M;堆是基于进程的,一个进程分配一个堆,堆的大小受GC根据运行情况动态控制。

5.装箱与拆箱
 装箱就是值类型转换成引用类型,拆箱就是引用类型转换为值类型

6.垃圾回收器GC
 GC:Garbage Collector,以应用程序的root为基础,遍历应用程序在heap上动态分配的所有对象,通过识别他们是否被引用来确定哪些对象资源可以被释放。

 托管资源和非托管资源

收藏 打印