结构体和类的区别
类型,成员变量,变量初始值,构造析构
- 结构体是值类型,类是引用类型
- 结构提成员不可被声明为protected,类可以
- 机构题变量声明不能指定初始值,类变量声明可以指定初始值
- 结构体不能声明析构以及默认的构造函数,类无此限制
值类型和引用类型的区别
值类型隐式继承自System.ValueType而且不能继承其他任何类型,引用类型继承自System.Object
值类型在栈中分配内存,引用类型在堆中分配内存,引用中存放的是堆中存放的地址
值类型存取快,引用类型比值类型存取慢
值类型表示实际数据,引用类型表示指向存储在对内存中的数据的指针
栈内存是自动释放的,堆内存是由.Net中的GC来自动释放的
值类型不能为null, 必须有一个确定值,引用类型在被赋值钱默认为null
赋值值类型变量是赋值变量的值,引用类型相当于赋值变量的地址
ref参数和out参数的作用是什么以及有什么区别
- ref 必须先赋值 out 不需要
Arraylist 和List的区别
- ArrayList是普通类,会隐式转换成object,存在装箱拆箱的可能,存在类型不安全。
- List是泛型类,在使用时必须填装入类型,不会涉及到装箱拆箱操作,处理效率高于ArrayList
Sealed关键字
- 类声明时使用sealed可以防止其他类继承此类
- 方法声明时,可以防止子类重写此方法,并且要与override一起使用
Heap,stack区别
- Heap是堆,Stack是栈
- Heap的空间是手动申请和释放,用关键字new来分配,Stack的空间由操作系统自动分配和释放
- Heap空间大,相对自由,Stack空间有限
GC产生原因和避免方法
- 如果有堆内存被系统判定为不再使用,那么由垃圾回收器GC进行回收
- 避免产生堆内存对象,减少new产生对象的次数
- string可改为StringBuilder
委托
委托也是一种数据类型,是存的方法的引用
委托变量可以承载一个或多个方法
委托( Delegate )是存有对某个方法或多个方法引用的一种引用类型
所有的委托( Delegate )都派生自System.Delegate类
委托本质上就是方法的列表(有顺序
事件中心,观察者模式
委托类型可以作为 一个参数传给一个方法
委托可以将方法当做一个变量去使用
一个委托变量,在另一个方法中去调用叫做回调
Action 是对 delegate的封装
反射
- 可以在运行的时候得到类内的函数和属性
协程
- 协程不是多线程,是在线程中执行的一段代码,它并不能做到真正异步。
- 程的代码可以只执行其中一部分,然后挂起,等到未来一个恰当时机再从原来挂起的地方继续向下执行。yieldreturn是Updatez之后执行
- 用处:异步加载
- 缺点:无法利用CPU多核
private, public protected, internal区别
- private:私有成员只对当前类可以access
- protected: 保护成员当前类this和当前类子类可以access
- public:任何类可以访问,没有限制
- internal:当前程序集中都可以访问
Interface 和 abstract区别
interface不能存在constructor,abstract类可以由constructor提供给子类使用
interface可以实现多继承,abstract只可以单继承
interface只能由静态的数据成员,一般不定义数据成员。abstract可以有自己的数据成员
interface所有的成员变量和方法都是abstract,abstract类可以有非abstract方法
继承interface的类必须实现接口所有的方法,继承abstract类的类必须实现所有的abstract方法。
泛型
- 泛型允许延迟编写类或方法中的编程元素的数据类型规范。泛型是可以与任何数据类型一起工作的类和方法