不允许使用抽象类类型的对象怎么办_.NET面试题汇总系列(二):面向对象

d81f38b4ff0eed971e2dbe14c2a924df.png

9f111487cf8397696642d65d189e180f.png

2021年还有几个月就要到了,这里整理一个.NET 工程师面试题系列,希望年底或者明年金三银四跳槽的程序猿们带来一些帮助,建议收藏,如果文中答案有不准确的地方,请在评论中指出!

这个系列会整理成一个电子书(gitbook制作),目前已制作好目录!欢迎关注,年底更新完这个系列,欢迎关注!

.NET面试题汇总系列目录

  • .NET面试题汇总系列(一):基础语法
  • .NET面试题汇总系列(二):面向对象
  • .NET面试题汇总系列(三):设计模式
  • .NET面试题汇总系列(四):集合、异常、泛型、LINQ、委托
  • .NET面试题汇总系列(五):常见的算法
  • .NET面试题汇总系列(六):数据库
  • .NET面试题汇总系列(七):前端
  • .NET面试题汇总系列(八):http://Asp.NET MVC
  • .NET面试题汇总系列(九):.NET Core

问题目录

  1. 什么是构造函数?
  2. class和struct的区别?
  3. 简述一下面向对象的三大特性?
  4. 构造函数是否能被重写?
  5. 抽象类和接口有什么区别?
  6. 类的执行顺序?
  7. 接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?
  8. 继承最大的好处?
  9. 请说说引用和对象?
  10. 什么是匿名类,有什么好处?
  11. 重写和重载的区别?
  12. C#中有没有静态构造函数,如果有是做什么用的?
  13. 怎样理解静态变量?静态成员和非静态成员的区别?
  14. 属性能在接口中声明吗?
  15. 在项目中为什么使用接口?接口的好处是什么?什么是面向接口开发?
  16. 什么时候用重载?什么时候用重写?
  17. 静态方法可以访问非静态变量吗?如果不可以为什么?
  18. 在.Net中所有可序列化的类都被标记为?
  19. C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?
  20. 当使用new B()创建B的实例时,产生什么输出?
  21. 能用foreach遍历访问的对象需要实现 ________________接口或声明________________方法的类型

问题和相关答案

1.什么是构造函数?

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

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

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

2.class和struct的区别?

相同点 都可以实现接口

不同点

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

使用场景

  • 1.Class比较适合大的和复杂的数据,表现抽象和多级别的对象层次时。
  • 2.Struct适用于作为经常使用的一些数据组合成的新类型,表示诸如点、矩形等主要用来存储数据的轻量级对象时,偏简单值。
  • 3.Struct有性能优势,Class有面向对象的扩展优势。

3.简述一下面向对象的三大特性?

  • 封装、继承、多态。
  • 封装:是通过把对象的属性的实现细节隐藏起来,仅对外提供公共的访问方法。
  • 继承:是通过子类继承基类、继承抽象类、继承接口实现的。
  • 多态:是通过重写基类的override 方法、重写虚方法实现的。 好处是:方便维护、易扩展。 缺点是:比面向过程性能低。

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

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

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

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

  • 1.抽象类用abstract修饰、接口用interface修饰
  • 2.抽象类中的方法可以实现,也可以不实现,有抽象方法的类一定要用abstract修饰,接口中的方法不允许实现
  • 3.抽象类只能单继承,接口支持多实现
  • 4.抽象类有构造方法,接口不能有构造方法
  • 5.接口只负责功能的定义,通过接口来规范类的,(有哪些功能),而抽象类即负责功能的定义有可以实现功能(实现了哪些功能)

6..类的执行顺序?

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

7.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?

接口可以继承接口,抽象类可以实现接口,抽象类可以继承实现类,但前提是实现类必须有明确的构造函数。

8.继承最大的好处?

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

9.请说说引用和对象?

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

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

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

11.重写和重载的区别?

  • 重写方法:关键字用override修饰,派生类重写基类的方法,方法命名、返回类型,参数必须相同
  • 重载方法:方法名必须相同,参数列表必须不相同,返回类型可以不相同。
  • 作用:重写主要是实现面向对象的多态性、重载主要是实现实例化不同的对象

12.C#中有没有静态构造函数,如果有是做什么用的?

特点: 静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。 用途 : 当类使用日志文件时,将使用这种构造函数向日志文件中写入项。

13.怎样理解静态变量?静态成员和非静态成员的区别?

静态变量属于类,而不属于对象;并对所有对象所享;静态成员在加类的时候就被加载。

14.属性能在接口中声明吗?

可以,不能有访问修饰符,不能初始化赋值。

15.在项目中为什么使用接口?接口的好处是什么?什么是面向接口开发?

  • 接口是一种约束,描述类的公共方法/公共属性,不能有任何的实现
  • 好处是:结构清晰,类之间通信简单易懂,扩展性好,提高复用性。
  • 面向interface编程,原意是指面向抽象协议编程,实现者在实现时要严格按协议来办。

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

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

17.静态方法可以访问非静态变量吗?如果不可以为什么?

静态方法和非静态变量不是同一生命周期,静态方法属于类,非静态变量属于具体的对象,静态方法和具体的对象没有任何关联

18.在.Net中所有可序列化的类都被标记为_?

[serializable]

19.C#中 property 与 attribute的区别,他们各有什么用处,这种机制的好处在哪里?

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

20.当使用new B()创建B的实例时,产生什么输出?

   using System;
    class A
    {
          public A()
          {
                PrintFields();
          }
          public virtual void PrintFields(){}
      }
      class B:A
      {
           int x=1;
           int y;
           public B()
           {
               y=-1;
           }
           public override void PrintFields()
           {
               Console.WriteLine("x={0},y={1}",x,y);
           }
     }

答:X=1,Y=0;

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

答:IEnumerable 、 GetEnumerator。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值