C#面试简答题
简答题目
1. 面向对象的思想主要包括什么?继承 多态 封装
? 封装:用抽象的数据类型将数据和基于数据的操作封装在一起,数据被保护在抽象数据类型内部。
? 继承:子类拥有父类的所有数据和操作。
? 多态:一个程序中同名的不同方法共存的情况。
有两种形式的多态– 重载与重写。
2. 什么是装箱和拆箱?举例说明。
装箱(boxing)和拆箱(unboxing)机制使得在C#类型系统中,任何值类型、引用类型和object(对象)类型之间进行转换,这种转换称为绑定连接。简单地说,有了装箱和拆箱的概念,对任何类型的值来说最终都可看作是object类型。 1、装箱转换
含义:将一个值类型隐式地转换成一个object类型,或把这个值类型转换成一个被该值类型应用的接口类型,把一个值类型的值装箱,就是创建一个object实例并将值复制给这个object
如: int I=10; object obj=I; 也可用显式的方法进行装箱操作: object obj=(object)I;
2、拆箱转换
和装箱相反,拆箱转换是指将一个对象类型显式地转换成一个值类型,或将一个接口类型显式地转换成一个执行该接口的值类型。
过程分两步:
首先,检查这个对象实例,看它是否为给定的值类型的装箱值
然后,把这个实例的值拷贝给值类型的变量。如:
int I=10;
object obj=I;
Int j=(int)obj;
3. 什么是重载?override与重载的区别?
重载是指针对所继承下来到方法,重新设计其处理方式,为将来原本处理方式覆盖过去。
在派生类要覆盖的方法前加override修饰,而基类的同名方法前加virtual修饰。这样就能实现多态。多态指一个程序中同名的不同方法共存的情况。 有两种形式的多态– 重载与重写。
4. 值类型和引用类型的区别?写出C#的样例代码。
? 值类型的变量本身包含他们的数据,而引用类型的变量包含的是指向包含数据的内存块的引用或叫句柄。
? 值类型变量存储在堆栈。每个程序在执行时都有自己的堆栈,其他程序不能访问。
? 引用类型存储在堆。引用类型存贮实际数据的引用值的地址。
? C#中的引用类型有4种
? (类、代表、数组、接口)
5. 如何理解委托?
代理是C#中的一种新的类型,要把方法作为参数传递给其他方法时,需要用到代理。
方法通过参数获得外界传递给他的数据,并对这些数据进行一定的操作。
C#通过代理机制来实现,通过参数把一个方法传递给另外一个方法。
代理四步曲:
a.生成自定义代理类:delegate int MyDelegate();
b.用New运算符实例化代理类:
MyDelegate d = new MyDelegate(MyClass.MyMethod);
c.最后通过实例对象调用方法:int ret = d();
d. 在程序中像调用方法一样应用代理的实例对象调用它指向的方法。 delegate int d(int I);
6. C#中的接口和类有什么异同。
什么是类?类可以这么理解.类就是功能的集合.类也可以看做是实现一种功能的集合或者方法..接口的概念:什么是接口?接口可以理解为,对类的规定,对类的约束,甚至对整个项目的约束. 种模版,定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!而类是负责功能的具体实现!在类中也有抽象类的定义,抽象类与接口的区别在于:抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。但接口是一个行为的规范,里面的所有东西都是抽象的!一个类只可以继承一个基类也就是父类,但可以实现多个接口
7. net中读写数据库需要用到哪些类?
Connection DataAdapter DataSet Command DataReader
8. 如何理解.net中的垃圾回收机制。
如果发现内存不够,则垃圾回收器,将全部对象作为无效对象(被回收对象),然后先将全局变量,static,处于活动中的局部变量,以及当前CG指针指向的对象放入一个表中.然后
会搜索新列表中的对象所引用的对象.加入列表中,其他没有被加入列表的对象都会被回收.
非托管对象要记得释放资源就行了吧.
9. .net的错误处理机制是什么
错误的处理顺序:finally先,catch次之,最后退会try代码..取消此次操作.返回catch中的异常信息.当然,你也可以定制自己的错误处理机制...如果你的异常处理中包含finally块.则此finally无论是否发生异常始终会被执行...
10. c#中using和new这两个关键字有什么意义?
using 的用途是为某个namespace建立别名,或者引用存在系统中的其它namespace.
New 用来创建实例,或者覆写方法。
11. 谈谈类和结构的区别?
1. 值类型与引用类型
? 结构是值类型:值类型在堆栈上分配地址
? 类是引用类型:引用类型在堆上分配地址
2.继承性
? 结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然没有明确sealed声明,可结构是隐式的sealed .
? 类:完全可扩展的,除非显式声明sealed, 否则类可以继承其他类和接口,自身也能被继承 。
注:虽然结构不能被继承 ,可结构能够继承接口,方法和类继承接口一样 。
3.内部结构的区别:
结构:
? 没有默认的构造函数,可以添加构造函数
? 没有析构函数
? 没有 abstract 和 sealed(因为不能继承)
? 不能有protected 修饰符
? 可以不用new 初始化
? 在结构中初始化实例字段是错误的
类:
? 有默认的构造函数
? 有析构函数
? 可以使用 abstract 和 sealed
? 有protected 修饰符
? 必须使用new 初始化
12. 什么是CLR?
公共语言运行时(Common Language Runtime,CLR),提供了一个可靠而完善的多语言运行环境。CLR是一个软件引擎,用于加载应用程序、检查错误、进行安全许可认证、执行和清空内存。它属于纯动态运行时的一种,它的主要组成部分是虚拟执行引擎VEE(Virtual Execution Enging),它可以打破语言和平台的限制。
13. C#的优点是什么?至少列出4点
1. C#中指针已经消失. 允许对原始指针的有限制的使用.
2. 基于.NET平台的,继承了自动内存管理和垃圾回收的特点.
3. C#拥有内建的支持来将任何组件转换成一个web service,运行在任何平台上的任何应用程序都可以通过互联网来使用这个服务.
4. 面向对象的
14. 面向对象编程的三大原则是什么?分别加以说明。
? 继承:都支持类的单一继承,但类可以实现多个接口。所有类都从一个公共的基类继承。
? 封装与可见性:都可决定类成员是否可见。除了C#的internal访问修饰符外,两者可见性机制非常相似
? 多态性:Java和C#都支持某些形式的多态性机制,且两者实现方法非常类似。
15. C#有哪5种类型的可访问性?
? public:成员可以从任何代码访问。
? protected:成员只能从派生类访问。
? internal:成员只能从同一程序集的内部访问。
? protected internal:成员只能从同一程序集内的派生类访问。
? private:成员只能在当前类的内部访问。
16. C#代码在执行前要编译为中间语言,中间语言的主要特征有?
● 面向对象和使用接口
● 值类型和引用类型之间的巨大差别
● 强数据类型
● 使用异常来处理错误
● 使用属性(attribute)
17. C#中引用类型有哪几种?
(类、代表、数组、接口)
18. 对象间可能存在的三种关系?
聚合,一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称作聚合。
关联,对象之间的静态联系(即通过对象属性体现的联系)称