C# 面试题 (持续更新中)

1. 抽象方法和虚方法在编程中都是处理继承和多态的重要概念,它们之间的关键差异是什么?

① 定义和实现:抽象方法是只有方法名称,没有方法体(也就是没有方法具体实现),子类必须重写父类抽象方法。虚方法有方法体,子类可以覆盖,也可不覆盖。

② 声明位置:抽象方法只能声明在抽象类中,使用关键字“abstract”。虚方法不是只能在抽象类中声明,可以在任何类中声明。

③ 强制性:抽象方法是一种强制派生类覆盖的方法,否则派生类将不能被实例化。虚方法没有这样的强制性。

④ 重写:派生类必须重写抽象类中的抽象方法,而虚方法则不必要。抽象方法和虚方法都可以供派生类重写。

 

2. .NET Framework和.NET Core是微软提供的两个不同的开发框架,有什么关键的区别?

① 跨平台性:.NET Core具有跨平台的优势,可以在任何支持的操作系统上运行,而.NET Framework只能在Windows系统上运行。
② 源代码开放性:.NET Core的源代码是开源的,这意味着开发者可以查看和修改其源代码,而.NET Framework的源代码是闭源的。
③ 应用程序兼容性:.NET Core可以运行.NET Framework应用程序,但可能需要额外的配置,反之则不一定。
④ 工具支持:对于Visual Studio等开发工具,对.NET Core的支持可能不如对.NET Framework的支持完善。
⑤ 运行环境:.NET Core使用的是轻量级的运行环境,而.NET Framework使用的是全功能的运行环境。
⑥ 未来发展:微软已经宣布将停止对.NET Framework的安全更新,而将重点放在.NET Core上。

总的来说,.NET Core和.NET Framework在跨平台性、源代码开放性、应用程序兼容性、工具支持、运行环境和未来发展等方面存在显著差异。选择使用哪一个框架取决于开发者的具体需求和目标。而.net是一种平台和框架,.net不是单纯的语言也不是单纯的工具,它是从底层平台开始构建起来的一个整体框架。

 

3. ref和out是C#中两种重要的参数传递方式,它们在使用方式和行为上有哪些不同?

① ref关键字使参数按引用来传递。这意味着当在方法中修改了参数的值,该修改会影响到原始参数。在方法内部对ref参数的任何修改都将反映到方法外部。因此,ref参数必须在方法调用之前进行初始化。

② out关键字使参数按输出传递。这意味着方法的执行可能会改变参数的值,但不会影响到原始参数。out参数在方法内部被赋予新的值,但这不会影响到方法外部的原始变量。因此,out参数不必在方法调用之前进行初始化。

③ 总结来说,ref和out的主要区别在于:ref参数是按引用传递的,并且修改会影响到原始变量;而out参数是按输出传递的,其值可能会在方法中被改变,但不会影响到原始变量。

 

4. 面向对象的七大原则和三大特性

七大原则:

 

1. 单一职责原则(Single Responsibility Principle,SRP):一个类应该只有一个引起它变化的原因,即一个类只负责一项职责。
2. 开放封闭原则(Open-Closed Principle,OCP):软件实体应该对扩展开放,对修改关闭。即软件实体应该在不修改原有代码的情况下进行扩展。
3. 里氏替换原则(Liskov Substitution Principle,LSP):所有引用基类对象的地方必须能够透明地使用其子类的对象。
4. 依赖倒置原则(Dependency Inversion Principle,DIP):高层模块不应该依赖低层模块,而是应该依赖其抽象。抽象不应该依赖细节,细节应该依赖抽象。
5. 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。
6. 合成复用原则(Composite Reuse Principle,CRP):尽量使用对象组合,而不是继承来达到复用的目的。
7. 迪米特法则(Law of Demeter,LoD):一个对象应该对其他对象有最少的了解。一个类应该对自己需要耦合或调用的类知道得最少。
 
三大特性
1. 封装:将对象的属性和方法封装起来,对外提供公共接口进行访问,隐藏内部细节,增强安全性和可维护性。
2. 继承:子类可以继承父类的属性和方法,在此基础上增加或修改内容,实现代码复用和扩展性。
3. 多态:同一种行为具有多种不同的表现形式,可以根据不同的对象类型调用不同的方法,实现代码的灵活性和可扩展性。例如,一个父类可以有多个子类,每个子类都可以重写父类的方法,实现多态的效果。

 

posted @ 2024-01-14 17:48  LXLR  阅读(61)  评论(0编辑  收藏  举报