首页 > 代码库 > C#基础知识

C#基础知识

1、面向对象、面向接口、面向方向编程的区别:

面向对象:强调对具有相同行为和属性事物的封装,更注重封装的完整性和功能的完整性

面向接口:定义要实现某类功能要实现的统一规范,而具体实现过程由实现该接口的类型决定

面向方面:主要提供与业务逻辑无关的操作。比如系统中多个地方要使用到的文件上传功能,可以使用面向方向的思想在所有上传文件之前对文件的大小、格式等信息进行过滤操作,而不是在每处上传代码里面完成对这些信息的过滤。

2、接口和类的区别

接口:不能实例化,自己没有状态,方法也没有具体的实现,被继承时,继承类必须实现接口的所有方法。接口就像租房时网上下载的一个租房合同模板。

类:可以被实例化,有状态,被继承时,继承类也不需要重新实现被继承类中的方法。但是如果被继承类的方法中有abstract修饰的,继承类则需要实现这个方法。类像是已经被填上内容的租房合同模板。

3、抽象基类和接口的对比

接口是用来定义行为规范的,不会有具体实现,而抽象类除定义行为规范外,可以有部分实现,但一个类能实现多个接口,但只能继承一个基类。接口是一种契约,定义了继承它的类必须声明接口中的方法。

区别:接口只有方法、属性、事件和索引符;类除了这四种成员之外还可以有别的成员(如字段)。接口没有构造函数,类有构造函数。

接口不能进行运算符的重载,类可以进行运算符重载。

接口成员没有任何修饰符,其成员都是公共的,而类的成员则可以有修饰符。派生于接口的类必须实现接口中所有的方法成员,而从类派生则不然。

4、a.Equals(b)与a == b的区别?

equals:比较两个变量的内容是否相等

==:比较两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

5、在对象比较中,对象一致和对象相等分别是指什么?

对象一致指的是引用相同。对象相等指的是内容相等。

6、什么是拆箱操作和装箱操作?

拆箱操作就是引用类型转变为值类型,通常伴随着从堆中复制对象实例的操作

装箱操作就是值类型数据转换为Object类型的引用对象

7、string类型是值类型还是引用类型

引用类型

8、DateTime类型的对象值可以为null么?

不可以,DateTime是struct,是值类型,只有引用类型可以赋值为null

9、关键词new的含义?有何副作用?

new在基类没有virtual关键字修饰的情况下必须使用,副作用是破坏了继承关系

10、virtual、sealed、override和abstract关键字

virtual:virtual关键字用于修饰方法、属性、索引器或事件声明,并使它们可以再派生类中被重写。例如,此方法可以被任何继承它的类重写

sealed:当对一个类或者方法,此修饰符会阻止其他类从该类继承或者方法无法被继承。

abstract:abstract修饰可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符以指示某个类只能是其他类的基类。标记为抽象或者包含在抽象类中的成员必须通过从抽象类派生的类来实现。

11、public、protected、private、internal之间的区别

public:对任何类和成员都公开,无限制访问。

protected:仅仅对该类以及该类的派生类公开。

private:仅仅对该类公开。

internal:只能在包含该类的程序集中访问该类(只是单独的项目,而不是整个解决方案)。

12、this是什么?可以再静态方法中使用this么?

this用于调用当前实例,无法再static方法中调用this。

13、ref修饰参数和out修饰参数的区别

ref、out都可以从函数内部传出值,区别是,ref修饰的参数必须先初始化、而out不用,这样的区别是有原因的,ref传入的值是可以使用的,而out传入的值总被编译器认为是没有初始化的,也就是无用的值。

14、什么是多态

封装、继承、多态是面向对象的基础,面试中,往往会被问到这些问题来考察你对面向对象的理解程度,我们可能都心里明白什么是多态,但是用语言表达出来就不是那么随意了,到底什么是多态呢?

维基百科给出这样的回答:多态,是指面向对象程序运行时,相同的信息可能会送给多个不同类型的对象,而系统可依据对象所属类型,引发对应类型的方法,而有不同的行为。简单来说,所谓多态意指相同的信息给予不同的对象会引发不同的动作。在面向对象程序设计中,多态一般指子类型多态。

举个简单的例子就是:有动物(Animal)之类型(Class),而且由动物继承出类型鸡(Chicken)和类型狗(Dog),并对同一源自类型动物(父类型)之一信息有不同的响应,如类型动物有“叫()”之动作,而类型鸡会“啼叫()”,类型狗则会“吠叫()”,则称之为多态。

15、什么面向对象

我的理解是,面向对象就是将一切事物都看成对象,而程序就是由这些对象组成的,我们在对面向对象编程时,只要知道每个积木块的作用就行了,不用考虑积木块的内部结构,我认为这就是面向对象。它与面向过程的区别是,我们在面向过程的编程中需要告诉程序怎么做,而在面向对象的编程中只要告诉那些类做什么就可以了,至于怎么做,是类内部的操作,我们不需要关心。

C#基础知识