1、private、public、protected、internal的区别
- public:对任何类和成员都公开,无限制访问;
- private:仅对该类公开;
- protected:对该类和其派生类公开;
- internal:只能在包含该类的程序集中访问该类;
2、ref和out参数
ref和out的参数效果一样,都是通过关键字找到定义在主函数里面的变量的内存地址,并通过方法体内的语法改变它的大小,不同点就是输出参数必须对参数进行初始化。ref必须初始化,out参数必须在函数里赋值,ref参数是引用,out参数是输出参数。
3、值类型和引用类型
- 值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址;
- 值类型存取快,引用类型存取慢;
- 值类型表示实际数据,引用类型表示指向内存堆中的数据的指针和引用;
- 栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放;
- 值类型继承自System.ValueType,引用类型继承自System.Object;
4、ArrayList和List的主要区别
ArrayList存在不安全类型(ArrayList会把所有插入其中的数据当中Object来处理)操作费时。List是接口,ArrayList是一实现了该接口的类,可以被实例化。
5、Interface与抽象类之间的不同
抽象类表示该类中可能已经有一些具体的方法定义,但接口就是只定义各个方法界面,不能具体的实现代码在成员方法中。类是子类用来继承的,当父类已经有实际功能的方法在该子类中不必实现,直接引用父类的方法,子类也可以重写该父类的方法。实现接口的时候必须要实现接口中所有的方法,不能遗漏一个。
6、Sealed用在类声明和函数声明时的作用
类声明时可防止其他类继承此类,在方法中则可防止派生类重写此方法。
7、常用的数据结构
链表、列表、散列表、队列、堆栈以及二叉树等。
8、设计模式
- 工厂模式:简单工厂模式解决的问题如如何去实例化一个合适的对象。
简单工厂模式的核心思想:有一个专门的类来负责创建实例的过程。凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂模式进行创建。 - 代理模式:一个是真正的你要访问的对象(目标类),一个是代理对象,真正对象与代理对象实现同一个接口,先访问代理类再访问真正的类的对象。
代理模式就是多一个代理出来,替原对象进行一些操作。使用代理模式可以将功能划分更清晰,有助于后期维护 - 策略模式:定义一系列算法,并将每一个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。策略模式的决定权在用户,系统本省提供不同的算法实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用于算法决策系统中,外部用户只需要决定用哪个算法即可。
- 观察者模式:当一个对象变化是,其它依赖该对象的对象都会收到通知,并且随着变化。对象之间是一对多关系。
- 单例模式:在C#应用中,单例对象能保证在一个CLR中该对象只有一个实例存在。
(1)某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销
(2)省去new操作字符,降低了系统内存的使用频率,减轻GC压力
(3)可作为唯一核心流程控制逻辑
9、结构体和类有何区别
结构体是一种值类型,而类是引用类型。值类型用于存储数据,引用类型用于存储对实际数据的应用。结构体就是当成值来使用的,类则是通过引用来对实际数据操作。类中有构造和析构函数,结构体中没有。
10、常见的排序方式
- 选择排序
- 冒泡排序
- 快速排序
- 插入排序
- 希尔排序
- 归并排序
11 结构体
C#结构体和其他编程语言类,直接采用struct来进行定义。在和传统的C或者C++比起来C#结构体又有些特点:
- 结构体可带方法、索引、字段、属性、运算符方法和事件
- 结构体可以定义构造函数(但是不能自定义默认构造函数,默认构造函数不可修改),但不能定义析构函数
- 与类不同,结构体不能继承其他结构体或者类
- 不能作为其他结构或类的基础结构
- 可实现一个或者多个接口
- 结构体必须赋值后才能使用
- 结构成员不能指定为 abstract、virtual 或 protected
12、Unity生命周期函数执行顺序
Awake——OnEnable——Start——FiexedUpdate——Update——LateUpdate——OnGUI——OnDisable——OnDestory