1. 请简述值类型与引用类型的区别
答:区别: 1. 值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址。 2. 值类型存取快,引用类型存取慢。 3. 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。 4. 栈的内存是自动释放的,堆内存是 .NET 中会由 GC 来自动释放。 5. 值类型继承自 System.ValueType, 引用类型继承自 System.Object 。
2.C# 中所有引用类型的基类是什么
答:引用类型的基类是 System.Object 值类型的基类是
System.ValueType
同时,值类型也隐式继承自 System.Object
3. 请简述 ArrayList 和 List 的主要区别
答: ArrayList 存在不安全类型 ‘ ( ArrayList 会把所有插入其中的数据都当做 Object 来处理)
装箱拆箱的操作(费时) List 是接口, ArrayList 是一个实现了该接口的类,可以被实例化。
4. 请简述 GC (垃圾回收)产生的原因,并描述如何避免?
答: GC 回收堆上的内存
避免: 1 )减少 new 产生对象的次数 2 )使用公用的对象(静态成员) 3 )将 String换为 StringBuilder
5. 请描述 Interface 与抽象类之间的不同
答:抽象类表示该类中可能已经有一些方法的具体定义,但接口就是公公只能定义各个方法的界面 ,不能具体的实现代码在成员方法中。
类是子类用来继承的,当父类已经有实际功能的方法时该方法在子类中可以不必实现,直接引用父类的方法,子类也可以重写该父类的方法。
实现接口的时候必须要实现接口中所有的方法,不能遗漏任何一个。
6. 下列代码在运行中会产生几个临时对象?
答:其实在 C# 中第一行是会出错的( Java 中倒是可行)。应该这样初始化:
string b = new string(new char[]{'a','b','c'});
7. 下列代码在运行中会发生什么问题?如何避免?
答:会产生运行时错误,因为 foreach 是只读的。不能一边遍历一边修改。
8. 请简述关键字 Sealed 用在类声明和函数声明时的作用
答:类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。
9. 请简述 private , public , protected , internal 的区别
答: public :对任何类和成员都公开,无限制访问 private :仅对该类公开 protected:对该类和其派生类公开 internal :只能在包含该类的程序集中访问该类 protected internal : protected + internal
文档截图