天天看点

C# 面试题 (四)

1, 请你说说.NET中类和结构的区别?

答:结构和类具有大体的语法,但是结构受到的限制比类要多。    

结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造函数和析构函数。    

结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是应用类型,改变其变量的值会改变其原值。    

申明结构用Struck关键字,申明类用class关键字,向方法传递结构是时是通过值传递的,而不是通过引用。    

与类不同,结构的实例化可以不使用New关键字。类可以实现接口。

2, 死锁的必要条件?怎么克服?

答:系统的资源不足,进程的推进的顺序不合适,资源分配不当,一个资源每次只能被一个进程使用,    

一个资源请求资源时,而此时这个资源已阻塞,对已获得资源不放,进程获得资源时,未使用完前,不能强行剥夺。

3, 接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

答:接口是可以继承接口的,抽象类是可以实现接口的,抽象类可以继承实体类,    

但是有个条件,条件是,实体类必须要有明确的构造函数

4, 构造器Constructor是否可以被继承?是否可以被Override?

答:Constructor不可以被继承,因此不能被重写(Overriding),但可以被重载(Overloading).

5、谈谈final,finally,finallize的区别?

答:final用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。    

Finally是异常处理语句结构中,表示总是执行的部分。    

Finallize表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。

6、New有种用法?

答:有3种,第一种是,实例化如:New Class()    

第二种是,public new 隐藏基类的方法    

第三种是,在泛型类申明中的任何类型参数都必须有公共的无参构造函数。

7、Const和ReadOnly?

答:Const用来申明编程时申明常量,ReadOnly用来申明运行时常量

8、UDP和TCP连接有和异同?

答:TCP是传输控制协议,提供的是面向连接的,是可靠的,字节流服务,    

当用户和服务器彼此进行数据交互的时候,必须在他们数据交互前要     进行TCP连接之后才能传输数据。

TCP提供超时重拨,检验数据功能。    

UDP是用户数据报协议,是一个简单的面向数据报的传输协议,是不可靠的连接。

9、public,internal,private,protected,protected internal各个访问修饰符的区别?

public:任何地方都可以调用。

internal:同一应用程序集内均可调用(VS.NET的一个工程中)

protected:只能在类以及它的子类中调用。 private:只能在类成员调用。

protected internal:只能被同一应用程序集内类和它的子类调用。

10、out 和 ref的区别与相同点?

out 和 ref都指示编译器传递参数地址,在行为上是相同的;

他们的使用机制稍有不同,ref要求参数在使用之前要显式初始化,out要在方法内部初始化;

out 和 ref不可以重载,就是不能定义Method(ref int a)和Method(out int a)这样的重载,从编译角度看,二者的实质是相同的,只是使用时有区别;

11、接口和类有什么异同?

不同点:

1)、接口不能直接实例化。

2)、接口只包含方法或属性的声明,不包含方法的实现。

3)、接口可以多继承,类只能单继承。

4)、类有分部类的概念,定义可在不同的源文件之间进行拆分,而接口没有。(这个地方确实不对,接口也可以分部,谢谢@xclin163的指正)

5)、表达的含义不同,接口主要定义一种规范,统一调用方法,也就是规范类,约束类,类是方法功能的实现和集合

相同点:

1)、接口、类和结构都可以从多个接口继承。

2)、接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员。

3)、接口和类都可以包含事件、索引器、方法和属性。

12、抽象类和接口有什么区别?

1)、继承:接口支持多继承;抽象类不能实现多继承。

2)、表达的概念:接口用于规范,更强调契约,抽象类用于共性,强调父子。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于"Is A"的关系;而接口是定义行为规范,强调“Can Do”的关系,因此对于实现接口的子类来说,相对于接口来说,是"行为需要按照接口来完成"。

3)、方法实现:对抽象类中的方法,即可以给出实现部分,也可以不给出;而接口的方法(抽象规则)都不能给出实现部分,接口中方法不能加修饰符。

4)、子类重写:继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法;而对于接口类所定义的方法或者属性来说,在继承类中必须重写,给出相应的方法和属性实现。

5)、新增方法的影响:在抽象类中,新增一个方法的话,继承类中可以不用作任何处理;而对于接口来说,则需要修改继承类,提供新定义的方法。

6)、接口可以作用于值类型(枚举可以实现接口)和引用类型;抽象类只能作用于引用类型。

7)、接口不能包含字段和已实现的方法,接口只包含方法、属性、索引器、事件的签名;抽象类可以定义字段、属性、包含有实现的方法。

13、重载与覆盖的区别?

重载:当类包含两个名称相同但签名不同(方法名相同,参数列表不相同)的方法时发生方法重载。用方法重载来提供在语义上完成相同而功能不同的方法。

覆写:在类的继承中使用,通过覆写子类方法可以改变父类虚方法的实现。

主要区别:

1)、方法的覆盖是子类和父类之间的关系,是垂直关系;方法的重载是同一个类中方法之间的关系,是水平关系。

2)、覆盖只能由一个方法,或只能由一对方法产生关系;方法的重载是多个方法之间的关系。