1. 首页
  2. 文档大全

程序员常见面试题

上传者:小** 2022-07-19 16:00:07上传 DOCX文件 32.44KB
程序员常见面试题_第1页 程序员常见面试题_第2页 程序员常见面试题_第3页

《程序员常见面试题》由会员分享,可在线阅读,更多相关《程序员常见面试题(14页珍藏版)》请在文档大全上搜索。

1、程序员常见面试题一、 C#1 请解释在 new 与 override 的区别?在 C# 中,new 关键字可用作运算符或修饰符。 new 运算符用于在堆上创建对象和调用构造函数。 new 修饰符用于隐藏基类成员的继承成员。使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签名。不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。重写声明不能更改虚方法的可访问性。重写方法和虚方法必须具有相同的访问级修饰符。不能使用下列修饰符修改重写方法:new static v

2、irtual abstract 重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且重写属性必须是虚拟的、抽象的或重写的。2 请解释 virtual 的含义?virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。默认情况下,方法是非虚拟的。不能重写非虚方法。不能将 virtual 修饰符与以下修饰符一起使用:static abstract override除了声明和调用语法不

3、同外,虚拟属性的行为与抽象方法一样。 在静态属性上使用 virtual 修饰符是错误的。 通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性3 请解释.net 采用委托实现的事件模型与 J AVA 中采用接口实现的事件模型有什么区别,以图示方式解释。4 请解释接口的显式实现有什么意义?接口是其他类型为确保它们支持某些操作而实现的引用类型。接口从不直接创建而且没有实际的表示形式,其他类型必须转换为接口类型。一个接口定义一个协定。实现接口的类或结构必须遵守其协定。接口可以包含方法、属性、索引器和事件作为成员。5 请以图示方式解释.net framework?VBC+C#

4、JScriptCommon Language SpecificationXML WebservicesWeb Forms Windows FormsData and XMLBase Class Library CLR CLIVisual Studio .NET6.什么是.net?.net 是一种平台和框架, .net 不是单纯的语言也不是单纯的工具,它是从底层平台开始构建起来的一个整体框架6 Ref 与 out 有什么不同?方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,必须将

5、参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。属性不是变量,不能作为 ref 参数传递。如果两种方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无法定义仅在 ref 和 out 方面不同的重载。方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一

6、个值。一个方法可以有一个以上的 out 参数。若要使用 out 参数,必须将参数作为 out参数显式传递到方法。out 参数的值不会传递到 out 参数。不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。属性不是变量,不能作为 out 参数传递。如果两个方法的声明仅在 out 的使用方面不同,则会发生重载。不过,无法定义仅在 ref 和 out 方面不同的重载。7 值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型。大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传递时被复制(即,它们通过值来传递)。在 .NE

7、T Framework 中,这些称为值类型。您可以创建值类型的实例,将它们作为参数传递,将它们存储为局部变量,或将它们存储在另一值类型或对象的字段中。值类型没有与存储类的实例相关的系统开销,并且它们不需要构造函数。值类型可以有字段、属性和事件。它们也有静态和非静态方法。当它们被装箱时,会从 System.ValueType 继承虚方法,并可实现零个或更多接口。值类型是密封的,这意味着不能从它们派生出其他类型。但是,可以直接对值类型定义虚方法,并且既可对该类型的已装箱形式,也可对未装箱形式调用这些方法。尽管不能从一种值类型派生出另一种类型,但是当所用语言处理虚方法比处理非虚方法或静态方法更方便时

8、,可以对值类型定义虚方法。引用类型的变量又称为对象,可存储对实际数据的引用。以下用于声明引用类型的关键字: class interface delegate8 结构体是值类型还是引用类型的?是值类型。9 C#中有没有静态构造函数,如果有是做什么用的?有. 静态构造函数用于初始化类。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数。静态构造函数的典型用途是:当类使用日志文件时,将使用这种构

9、造函数向日志文件中写入项。10 在 C#中如何实现多态?多态性指定义具有功能不同但名称相同的方法或属性的多个类的能力,这些类可由客户端代码在运行时交换使用。大部分面向对象的编程系统都通过继承提供多态性。基于继承的多态性涉及在基类中定义方法并在派生类中使用新实现重写它们。11 什么是反射?如何实现反射?反射则提供了封装程序集、模块和类型的对象。您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。通过反射命名空间中的类以及 System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。您

10、也可以使用反射在运行时创建类型实例,然后调用和访问这些实例。12 请解释流与文件有什么不同?文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。因此,对于文件,人们常会想到目录路径、磁盘存储、文件和目录名等方面。相反,流提供一种向后备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一。正如除磁盘外存在多种后备存储器一样,除文件流之外也存在多种流。例如,还存在网络流、内存流和磁带流等。13 程序集与命名空间有什么不同?命名空间是用于避免命名冲突 ,专用于组织代码,当代码要在其他某个应用 程序中重用时,可以降低复杂性。程序集是重用代码的一种方式不同:

11、可以将相同命名空间中的类部署到不同的程序集中,也可以命名空间中的类部署到一个程序集中命名空间 程序集有逻辑编译时机制 有物理编译时机制不是运行时实体 是运行时实体为源代码元素的名称提供逻辑结构 为可执行文件的运行时提供物理结构14 请编写一个捕获所有错误的错误处理代码1516 Try17 18 catch(Exception e)19 委托与事件是什么关系?为什么要使用委托o 委托提供了封装方法的方式,事件是某动作已发生的说明,事件是建立于委托之上的o 程序运行时同一个委托能够用来调用不同的方法只要改变它的引用方法即可o 同一个委托能够用来调用不同的方法,只要改变它引用的方法即可,因此委托调节


文档来源:https://www.renrendoc.com/paper/212711687.html

文档标签:

下载地址