【经验】一文搞懂C#面向对象面试题

 当然在看之前,别忘常按点赞,一键三连哦!!!

【经验】一文搞懂C#面向对象面试题_第1张图片

1.什么是类?什么是对象?

类:对象的模板,用于封装定义的成员变量和构造方法,属于引用类型。

对象:类当中的一个具体实例

2、什么是面向对象开发?面向对象的三大基本特征是什么?

通俗来讲就是像描述现实生活中的情况进行程序开发,针对某一件事务来设计相对应的功能。

例如我们要开发个售票系统,则会想到要设计用户登录,购票,票数统计等等一系列用户可能会需要的功能。从而让程序设计的更完善。

面向对象的三大基本特征:封装、继承、多态

3.简述方法定义的几种方式

定义方法:方法类型 返回类型 方法名(参数列表){ }

也可以使用virtual重写方法、abstract在抽象类中重写方法、override重写基类方法。

4.类的组成部分有哪些

成员变量、构造方法、引用的命名空间

5.成员变量与局部变量的区别

在类中的位置不同

成员变量:在类中方法外

局部变量:在方法定义中或方法声明上。

在内存中的位置不同

成员变量:在堆内存中

局部变量:在栈内存中

初始化值不同

成员变量:有默认值

局部变量:没有默认值,必须定义,赋值,然后才能使用

生命周期不同

成员变量:随着对象的创建而存在,随着对象的消失而消失

局部变量:随着方法的调用而存在,随着方法的调用完毕而消失

6.写出常用的访问修饰符,按由小到大排序。

private:私有的,仅本类中可访问

protected:受保护的,在类的继承过程中可访问

internal:此程序集可访问

public:共有的

7.列举所掌握的所有数据类型,按分类写

基本数据类型(值类型)

整数类型:byte、short、int、long

浮点类型:float、double、decimal

字符型:char

布尔类型:bool

引用类型

字符串:string

对象:object

8.什么是异常?异常的基本结构是什么

程序运行时产生的错误称为异常。

try:对可能抛出异常的代码进行包裹

catch:用于指定要捕获的异常类型,从而进行相应处理

finally:无论是否抛出异常都会执行的代码块

11.String与StringBuffer的区别

string是基本类型,是不可改变对象,一旦被创建就不能修改它的值。对已经存在的string对象的修改都是重新创建一个新的对象,然后将新值保存进去。而StringBuffer是一个可变对象,当对它进行修改时不会像string那样重新建立对象。它只能通过构造函数来建立。对象被建立后,在内存中就会分配内存空间,并初始保存一个null,向StringBuffer中赋值的时候可以通过它的append()方法。字符串连接操作中StringBuffer的效率要比stirng高。

9.什么是方法重写?好处是什么

“重写”父类方法就是修改它的实现方式或者说在子类对它进行重新编写。

好处就是代码的重用性集扩充性更强。

10.什么是抽象方法?与普通方法的区别是什么

只需要定义,而不需要实现的方法称为抽象方法。

区别:抽象方法没有方法体,没有方法具体实现、抽象方法只能在抽象类中声明、派生类必须重写抽象类中的抽象方法。

11.ADO.NET的五个主要对象

connection、command、reader、adapter、dataset

12.三层架构有哪几层?每层作用是什么

视图层(ui):负责显示和采取用户操作,不包含任何业务相关的逻辑处理。

业务逻辑层(BLL):通过获取Ui传来的用户指令,执行业务逻辑,在需要访问数据时,直接交给DAL进行处理,然后返回数据给Ui层。

数据访问层(DAL):只提供基本的数据访问,不包含任何的业务逻辑。

13.什么是装箱(boxing)和拆箱(unboxing)

装箱:将值类型转换成引用类型(Object)

拆箱:将引用类型转换成值类型

14.String s = new String(“xyz”); 创建了几个String Object

两个;一个可以被引用的“s”对象,一个括号里面的值。

15.值类型和引用类型的区别

值类型存储在栈内存,长度都是固定的;引用类型存储在堆内存,可以动态扩展长度。

16.try()里有一个return语句,那么紧跟在这个try后的finally()里的code会不会被执行?在什么时候被执行

会执行;在return语句之前被执行。

17.new关键字的用法有哪些

new运算符:用于创建对象和调用构造函数。

new修饰符:在用作修饰符时候,new关键字可以显式隐藏从基类继承的成员。

new约束:用于在泛型声明中约束可能用作类型参数的参数类型。

18.在C#中,string str = null 与 string str = “” 的区别

null在内存中没有分配内存空间,“”则分配了空间。

为null的字符串没有被实例化,而为“”的字符串则已经被实例化。

19.请详述在dotnet中类(Class)与结构(struct)的异同

Class可以被实例化,属于引用类型,分配在堆内存中,可以实现接口和单继承其他类。

struct属于值类型,分配在栈内存中,可以实现接口,不能作为基类型,而Class可以。

20.进程和线程分别该怎么理解

进程指运行中的应用程序,每个进程都有自己独立的内存空间,而线程是属于进程中的一个实体,没有独立的内存空间,寄生在进程当中。

21.DataReader与DataSet的区别

DataReader在使用时会始终占用SQLConnection,任何对SQLConnection的操作都会引发DataReader的异常,且每次读取时只在内存中加载一条数据,占用的内存相对较小。

DataSet则会将数据一次性的加载到内存中,读取完毕后会放弃数据库连接,相对来说会比较消耗内存。但会比DataReader更灵活,可以动态的添加行、列数据,对数据库进行回传更新操作。

22.描述一下virtual、sealed、override和abstract的作用

virtual:字面意思为虚拟,用于将类中成员定义成虚拟的,表示这些成员会在继承后重写其中的内容。

sealed:字面意思为密封的,用此修饰符修饰的类或方法不能被继承。

override:用于重写继承的父类当中的方法。

abstract:用于将类、方法、属性、事件和索引器定义为抽象的。

40.什么是成员变量?什么是局部变量?

成员变量是类中定义的变量、局部变量是在方法内定义的变量。

23.简述子类实例化的过程

产生对象并对成员默认初始化。

对构造方法中的形式参数赋值。

检查构造方法中是否有this语句。

super调用或隐式调用父类的构造方法。

对当前类中的变量显式初始化。

执行当前构造方法中的代码。

24.this与base的区别

this关键字可以访问当前类中定义的字段、属性、和方法。

base关键字可以调用当前类继承的父类中的字段、属性和方法。

25.当一个线程进入对象的一个synchronized方法后,其他线程是否可以进入此对象的其他方法

不可以,因为一个对象的一个synchronized方法只能由一个线程访问。

26.简述C#派生类中的构造函数

答:使用C#派生类中的构造函数时,需要注意关键字base和this的区别,关键字base表示调用基类中的构造函数,而this表示调用本类中的构造函数.

27.什么是构造函数

属于一种方法,用于在创建对象时初始化对象,给对象成员变量赋初始值。并且构造函数的命名也必须要与类名完全相同,构造函数也不能被直接调用,需要通过new运算符在创建对象时才会进行自动调用。

封装

1封装   

被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。

2.什么是封装性?好处是什么

封装是将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

封装的好处:隐藏类的实现细节、只能通过规定方法访问数据、方便加入控制语句及修改实现。

继承

1.简述C#中的密封类和密封方法

答:密封类使用sealed关键字进行修饰,他不能用作其他类的基类,并且他没有派生类.密封类的作用是防止其他类继承该类密封方法是使用sealed关键字进行修饰的方法,它并不影响类的继承,但它可以防止重写基类中特定的虚方法.

2.什么是继承?继承的特点及关键字是什么

继承是允许根据一个类来定义另一个类。当创建一个类时,可以不用重新编写新的数据成员及成员函数,只需要设计一个新的类,然后继承已有类的成员即可,已有的类称为基类,新的类则称为派生类。关键字是:符号。

3.继承的优点有哪些?如果父类与子类同样的方法,不同的功能怎么处理

优点:简化了子类的定义及扩展了父类的定义。

可以使用方法重写或者方法重载进行处理。

4.是否可以继承String类

不可以继承。因为String类有final修饰符,使用final修饰的类时不允许被继承的。

5.构造器Constructor是否可以被继承?是否可以被override

构造器不能被继承,也不可以被重写(override)

多态

1.简述C#中的虚方法

答:注意:当使用virtual关键字修饰符后,不允许再同时使用abstract,static,或override关键字进行修饰使用virtual关键字修饰的方法就是虚方法,虚方法的关键字用于修饰属性方法.索引器或事件声明,并使他们可以在派生类中被重写.虚方法必须并提供派生类覆盖该方法的选项,并且必须有实现部分,虚方法的作用是可以在派生类中被重写.

2.C#静态类构造方法特点

答:注意:静态构造方法,是在构造方法的名字前使用static关键字修饰符的构造方法.

C#中静态类构造方法最主要的特点是:静态的构造方法是最先被执行的构造方法,并且在一个类里只允许有一个无参的静态构造方法.

4个特点如下:只允许有一个无参的静态构造方法在一个类中存在.

      静态的构造方法不会被继承

      在所有的静态成员被引用之前执行静态构造方法

      在所有的构造方法中最先被执行的是静态的构造方法.

3.简述接口和接口继承

答:C#中接口具有9中特性:

1.接口只定义,不包含方法的实现

2.接口可以包含方法,属性.事件和索引器

3.接口成员必须是公共的

4.接口不能直接实例化

5,接口不能包含任何字段

6.接口描述可属于任何类或结构的一组相关行为.

7.接口自身均可以从多个接口继承

8.类和结构可以从多个接口继承

9.接口类似于抽象类,但继承接口的类型必须实现接口中的所有定义成员对象.

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合.当定义了接口,就必须在继承类中实现它,这样类就支持接口中所

指定的所有属性和成员.

4.静态方法与非静态方法的区别

●静态的变量在类之间是共享的,非静态的是类的实例化对象独享的,

●静态方法可以通过类名.方法名的形式进行调用,不会产生内存开销,非静态的方法,需要实例化类的对象, 将方法保存到代码区中个,然后通过对象.方法名的方式进行调用。

●静态方法中调用非静态方法,需要先实例化非静态的方法对象,再通过对象.方法名的方式进行调用。

●非静态方法中可以直接调用静态方法与非静态方法。

5什么是方法重载

方法名相同,参数类型或参数个数不同

6.什么是多态性?多态性的好处是什么

同一操作作用于不同的对象,可以有不同的解释,产生不同的效果,这就是多态性。

多态具有可替换性、可扩充性、接口性、灵活性及简化性这些好处。

7.多态的实现条件有哪些

要有继承、重写、父类引用指向子类对象三个条件。

8.什么是抽象类

包含抽象方法的类称为抽象类。

9.什么是接口

接口是一种用来定义程序的协议,它描述可属于任何类型或结构的一组相关行为。接口可有方法、属性、事件和索引器或这四种成员的任何组合类型,但不能包含字段。

10.抽象类与接口的区别是什么

● 接口可以多继承,抽象类不能实现多继承。

● 接口只能定义抽象规则,抽象类即能定义抽象规则也能提供已实现的成员。

● 接口是一组行为规范,抽象类时一个不完全的类,着重于族的概念。

● 接口支持回调,抽象类不能实现回调,因为继承不支持。

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

● 接口多定义对象的行为,抽象类多定义对象的属性。

● 接口可以作用于值类型和引用类型,抽象类只能作用于引用类型。

11.简述一下什么情况下使用抽象类?什么情况下使用接口

接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。

而抽象类在代码实现方面发挥作用,可以实现代码的重用。

12.override与overload的区别

override是重写方法,方法名,返回值以及参数相同,存在于父类和子类之间。

override是重载方法,参数类型、个数、顺序至少要有一个不相同,存在于父类及子类中。

13.接口能否继承接口,抽象类能否继承接口,抽象类能否继承普通类

接口可以继承接口、抽象类不能继承接口,但可以实现接口、抽象类可以继承普通类。

14.什么是虚函数?什么是抽象函数

用virtual关键字修饰的成员函数称为虚函数,用于实现多态性。

没有执行代码,只定义了的函数称为抽象函数。

委托与事件

1.简述事件机制

答:事件是.net程序员中经常使用的一个机制,事件是一种使对象或类能够提供通知的成员,客户端可以通过提供事件处理程序为相应的

事件添加可执行代码,事件可以理解为一种特殊的委托.

2.什么是委托

答:本质上,委托的调用就是执行了在定义委托时所生成的Invoke()方法

C#中的委托类都继承自Systen.Delegate类型,委托类型的声明与方法签名相似,有一个返回值和任意数目类型的参数.

委托是一种可用于封装命名或匿名方法的引用类型.委托类似于函数指针,但是委托是类型安全和可靠的.

3.C#中被委托的方法必须是静态的嘛

答:通过上面的分析读者可以清晰地判别,委托不仅能绑定静态方法,同时也可绑定实例方法.当绑定实例方法时,Delegate.Target属性将会设置成指向该实例方法所属类型的一个实例对象,当绑定静态方法时,Delegate.Target属性将会设置成null;

SQL知识

1.什么是事务?简述事务的编写流程

事务是指为单个逻辑单元执行的一系列操作。

执行步骤:

创建事务所使用的一些对象(SqlConnection、SQL语句、SqlCommand)。

实例化SqlTransaction类。

使用这个事务所使用的con连接。

使用BeginTransaction方法执行这个事务。

在try{ }块里执行SQLCommand命令。

如果执行成功则执行commit()提交,否则执行rollback()回滚操作。

2.事务的特性有哪些

事务具备原子性、一致性、隔离性、持久性4大特性。

原子性(atomic):

事务中包含的各项操作必须全部执行或全部不执行。任何一项操作失败都会导致整个事务失败,其他已执行的任务所做的数据操作都会被撤销。只有所有的操作全部成功了,整个事务才算执行完成。

一致性(consistent):

保证了当事务结束后,系统状态是一致的。

隔离性(isolated):

使得并发执行的事务,彼此无法看到对方的中间状态。保证了并发事务的顺序执行,而不会导致系统状态不一致。

持久性(durable):

保证了事务完成后所作的改动都会被持久化。如果资源发生故障,可以通过日志将数据重建起来。

3.CTS、CLR、CLS分别是什么

CTS:通用类型系统、CLR:公共语言运行时、CLS:公共语言规范

这三个是.NET Framework 3C 标准

4.什么是GC,GC的作用是什么

GC是一种垃圾回收机制;用于回收堆内存中没有使用过的对象或变量,从而释放内存。

5.数据表中有user表,字段ID、name、创建时间,写出获取最新一条注册用户信息

SELECT TOP * 1 FROM user

ORDER BY 创建时间 DESC

6.启动一个线程是run方法还是start方法

启动一个线程是使用start()方法。

7.SQL函数与存储过程的区别是什么

Sql函数可以被select调用,而存储过程不可以存储过程返回多样化,sql函数只能返回值或者表对象

他们都支持Procedure cache模式

8.什么是视图?视图的作用是什么

视图是一组查询的封装,是属于虚拟表(Create View)

作用包括:

  • 数据安全性(自定义对外的展示数据与字段)
  • 方便程序端调用,提升网络传输效率

9.SQL主键与外键的区别是什么

外键是参照关系表的主键,体现的是表之间的关系,主键是表中实体的唯一标识(表中外键可以重复,主键内容必须唯一)。

你可能感兴趣的:(C#)