CSharp经典面试题(一)

.NET
518
0
0
2022-05-01
标签   C#

CSharp经典面试题(一)

1.C#中的委托是什么,委托的关键字是什么?事件是不是一种委托?

委托(关键词是delegate):

  1. 方法中传入方法的句柄,相当于c++中的函数指针,但是它是安全的;

  2. 它把方法的调用者交给其它方法来决定,应用上增加了灵活性;

  3. 类里外都可以定义,定义时仅给出参数的签名,并无方法实体

  4. 类外部定义好后,里面可以像字段一样添加该委托类型的成员;

  5. 如果委托成员的没有限制访问(比如访问修饰符为public),在该类内外部均可以调用(而事件只能在内部调用);

  6. 可给委托添加多个处理方法(多播委托),但这些方法签名必须委托定义的一致;

  7. 事件是一种特殊的委托。

2.请详述在C#中的接口和类之间的异同。

类:

  1. 成员包括字段,属性,索引器,方法(特殊的如构造函数),委托和事件

  2. 类定义可在不同的源文件之间进行拆分。

接口:

  1. 不能直接实例化;

  2. 不包含方法的实现(接口里面不应该有字段和构造函数;)

  3. 接口里面不应该有访问修饰符(所有的东西都是抽象并公开的(public abstract))

  4. 子类可以有多个接口(因为接口中所有成员都是抽象公开的,子类若继承了多个接口,而接口中有相同的方法,子类延用哪个接口方法是由方法前面的接口名限定了的;但不能有多个父类,因为在继承过程中,子类可能不清楚延用哪个父类的方法(这时方法前面不能加父类名加以限制))

相同点:

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

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

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

3.override与重载的区别

override(重写关键字)

  1. 看子类重写了父类的虚或者抽象成员与否

  2. 是动态的多态(会具体根据子类的实际情况实现特定的功能)

重载

  1. 同一个类中名称相同,参数签名不同的两个或多个成员

  2. 是静态的多态(只实现本类的某些功能)

4.请概述反射和序列化。

反射:

  1. 公共语言运行库加载器管理应用程序域。

  2. 这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。

  3. 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。

  4. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。

序列化

  1. 是将对象状态转换为可保持或传输的格式的过程。

  2. 与序列化相对的是反序列化,它将流转换为对象。

  3. 这两个过程结合起来,可以轻松地存储和传输数据。