C#.NET面试题汇总系列二:面向对象

0. 参考文档

1. 什么是构造函数?

概念:构造函数的方法名与类型相同、没有返回类型

作用:完成对类的对象初始化

创建一个类的新对象时,系统会自动调用该构造函数初始化新对象, 如果没有写定义,那么系统会自动提供一个不带任何参数的 public 构造函数

2. C#中的静态构造函数

静态构造函数既没有访问修饰符,也没有参数。

在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类,无法直接调用静态构造函数

在程序中,用户无法控制何时执行静态构造函数

3. 构造函数是否能被重写?

构造器Constructor不能被继承,因此不能重写,但可以被重载

4. class和struct的区别?

相同点:都可以实现接口

不同点:

  • class是引用类型,struct是值类型
  • class允许继承、被继承,struct不允许,只能继承接口
  • class可以初始化变量,struct不可以
  • class可以有无参的构造函数,struct必须是有参的构造函数,而且在有参的构造函数必须初始化所有成员

5. C#中类成员的访问修饰符有哪些?

private : 私有成员, 在类的内部才可以访问

protected : 保护成员,该类内部和继承类中可以访问

public : 公共成员,完全公开,没有访问限制

internal: 在同一程序集内可以访问

6. 面向过程和面向对象的区别

面向过程和面向对象都是解决问题的逻辑方法,分析问题既可以用面向对象的方法来思考,也可以用面向过程方法来解决,但两者还是有一定区别

面向过程:是分析问题并解决问题所需要的步骤,强调是解决问题的步骤。可以先定义多个函数,在使用的时候逐步调用函数即可

面向对象:是把问题分解成多个对象,强调的是解决问题的行为表现

7. 面向对象的三大特性

封装:是通过把对象的属性的实现细节隐藏起来,仅对外提供公共的访问方法

继承:是通过子类继承基类、继承抽象类、继承接口实现的

多态:是通过重写基类的override 方法、重写虚方法实现的。 好处是:方便维护、易扩展。 缺点是:比面向过程性能低

8. 继承最大的好处

对父类成员进行重用,增加代码的可读性、灵活性

9. 什么时候用重载?什么时候用重写?

当一个类需要用不同的实现来做同一件事情,此时应该用重写,而重载是用不同的输入做同一件事情

10. 抽象类和接口有什么区别?

相同点:都不能直接实例化

不同点:

  • 抽象类用abstract修饰、接口用interface修饰

  • 抽象类中的方法可以实现,也可以不实现,接口中的方法不允许实现

  • 抽象类只能单继承,接口支持多实现

  • 抽象类有构造方法,接口不能有构造方法

11. 普通类与接口的区别

相同点:

  • 都可以从多个接口继承
  • 都可以包含事件、索引器、方法和属性

不同点:

  • 接口不能直接实例化,类可以
  • 接口不包含方法的实现,类包含
  • 可以继承多个接口,但只能继承一个类
  • 接口不能实现部分,类可以定义为部分类

12. 接口的好处是什么?

接口是一种约束,描述类的公共方法/公共属性,不能有任何的实现

好处是:结构清晰,类之间通信简单易懂,扩展性好,提高复用性

13. 类的执行顺序?

执行顺序:父类,子类,静态块,静态字段,非静态块,非静态字段,构造器,方法

14. 请说说引用和对象

对象和引用时分不开的,对象生成一个地址,放在堆里面,引用则指向这个地址,放在栈里面

15. 什么是匿名类,有什么好处?

不用定义、没有名字的类,使用一次便可丢弃。好处是简单、随意、临时的

16. 重写和重载的区别

重写方法:关键字用override修饰,派生类重写基类的方法,方法命名、返回类型,参数必须相同

重载方法:方法名必须相同,参数列表必须不相同,返回类型可以不相同

作用:重写主要是实现面向对象的多态性、重载主要是实现实例化不同的对象

17. C#中 property 与 attribute的区别

一个是属性,用于存取类的字段,一个是特性,用来标识类,方法等的附加性质

18. 能用foreach遍历访问的对象需要实现接口或声明方法的类型

需要实现IEnumerable接口或声明GetEnumerator方法的类型

posted @ 2022-03-01 13:21  位永光  阅读(427)  评论(0编辑  收藏  举报