C#面试必会题目

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
25、JAVA 的代码是半编译半解释的,C#代码是否也是这样的?
C#源代码经过语言编译器执行第一次编译,变为中间语言,然后再由 CLR 编译成可执行代 码。
26、私有程序集与共享程序集有什么区别?
私有程序集: (1)默认情况下,C#程序编译为私有程序集。 (2)需要放在应用程序所在的文件夹中。 (3)程序集的名称在应用程序中应当是唯一的。 共享程序集: (1)可以被不同的应用程序共享。
this.y = i; } public void X() {
Console.WriteLine(y.ToString()); } static void Main(string[] args) {
Class1 c1 = new Class1(); c1.X(); } }
21、params 是什么含义?
5、什么是.net?
.net 是一种平台和框架,.net 不是单纯的语言也不是单纯的工具,它是从底层平台开始构建 起来的一个整体框架。
6、ref 与 out 有什么不同?
方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用 方法时,在方法中对参数所做的任何更改都将反映在在该变量中。若要使用 ref 参数,必须 将变量作为 ref 参数显示传递到方法。变量的值被传递到 ref 参数。传递到 ref 参数的变量必 须要先初始化。 与 out 参数相比,变量在传递到 out 参数之前不必显示初始化。属性不是变量,不能作为 ref 参数传递。如果两个方法的声明仅在它们对 ref 的使用方面不同,则将出现重载。但是,无 法定义仅在 ref 和 out 方面不同的重载。 方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用 方法时,在方法中对参数所做的任何更改都将反映在该变量中。 当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个 值。一个方法可以有一个以上的 out 参数。若要使用 out 参数,必须将变量作为 out 参数显 示传递到方法。out 变量的值不会传递到 out 参数。属性不是变量,不能作为 out 参数传递。 如果两个方法的声明仅在 out 的使用方面不同,则会发生重载。不过,无法定义仅在 ref 和 out 方面不同的重载。
3、请解释接口的显示实现有什么意义?
接口是其他类型为确保它们支持某些操作而实现的引用类型。接口从不直接创建而且没有实 际的表示形式,其他类型必须转换为接口类型。一个接口定义一个协定。实现接口的类或结 构必须遵守其协定。接口可以包含方法、属性、索引器和事件作为成员。
4、请以图示的方式解释.net framework?
命名空间 程序集 有逻辑编译时机制 有物理编译时机制 不是运行时实体 是运行时实体 为源代码元素的名称提供逻辑结构 为可执行文件的运行时提供物理结构
16、请编写一个捕获所有异常的异常处理代码?
try {
... } catch(Exception ex) {
... }
17、委托与事件是什么关系?为什么要使用委托?
14、请解释流与文件有什么不同?
文件是一些具有永久存储及特定顺序的字节组成的一个有序的、具有名称的集合。因此,对 于文件,人们常会想到目录路径、磁盘存储、文件和目录名等方面。相反,流提供一种向后 备存储器写入字节和从后备存储器读取字节的方式,后备存储器可以为多种存储媒介之一。 正如除磁盘外在多种后备存储器一样,除文件流之外也存在多种流。例如,还存在网络流、 内存流和磁带流等。
params 关键字可以指定在参数数目可变处定义参数的方法。在方法声明中的 params 关键 字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字。
22、C#中没有具有不同的行为,使用操作符可以使方程式简单易懂。C# 允 许用户定义的类型通过使用 operator 关键字定义静态成员函数来重载运算符。注意必须用 public 修饰且必须是类的静态的方法。 C#为了类型安全,默认并不支持指针。但是也并不是说 C#不支持指针,我们可以使用 unsafe 关键词,开启不安全代码(unsafe code)开发模式。在不安全模式下,我们可以直接操作内存, 这样就可以使用指针了。在不安全模式下,CLR 并不检测 unsafe 代码的安全,而是直接执 行代码。unsafe 代码的安全需要开发人员自行检测。 在下列情况中可以开启不安全代码使用指针 (1)处理磁盘上的现有结构 (2)涉及内部包含指针的结构的高级 COM 或平台调用方案 (3)性能关键代码 不鼓励在其他情况下使用不安全上下文。具体地说,不应该使用不安全上下文尝试在 C#中 编写 C 代码。
(2)在所有使用程序集的应用程序中,程序集名称应当是唯一的。 (3)放在全局程序集缓存中。
27、请解释进程与线程的区别?进程与程序的区别?
用最简短的话来说,进程就是当前运行的应用程序。线程是操作系统向其分配处理器时间的 基本单位。线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。
7、值类型与引用类型有什么不同?请举例说明?并分别列举几
种相应的数据类型。
大多数编程语言提供内置的数据类型(比如整数和浮点数),这些数据类型会在作为参数传 递时被复制(即,它们通过值来传递)。在.NET Framework 中,这些称为值类型。您可以创
建值类型的实例,将它们作为参数传递,将它们存储为局部变量,或将它们存储在另一值类 型或对象的字段中。值类型没有与存储类的实例相关的系统开销,并且它们不需要构造函数。 值 类 型 可 以 有 字 段 、属 性 和事 件。 它 们也 有静 态和 非 静态 方法 。 当它 们被 装 箱时,会从 System.ValueType 继承虚方法,并可实现零个或更多接口。值类型是密封的,这意味着不能 从它们派生出其他类型。但是,可以直接对值类型定义虚方法,并且即可对该类型的已装箱 形式,也可对未装箱形式调用这些方法。尽管不能从一种值类型派生出另一种类型,但是当 所用语言处理虚方法比处理非虚方法或静态方法更方便时,可以对值类型定义虚方法。 引用类型的变量又称为对象,可存储对实际数据的引用。以下用于声明引用类型的关键字: (1)class (2)interface (3)delegate
1、请解释 new 与 override 的区别?
在 C#中,new 关键字可用作运算符和修饰符。 (1)new 运算符用于在堆上创建对象和调用构造函数。 (2)new 修饰符用于隐藏基类成员的继承成员。 使用 override 修饰符来修改方法、属性、索引器或事件。重写方法提供从基类继承的成员的 新实现。由重写声明重写的方法称为重写基方法。重写基方法必须与重写方法具有相同的签 名。 不能重写非虚方法或静态方法。重写基方法必须是虚拟的、抽象的或重写的。 重写声明不能更改虚方法的可访问性。重写方法和虚方法必须具有相同的访问级的修饰符。 不能使用下列修饰符修改重写方法:new、static、virtual、abstract。 重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且重写属性必须 是虚拟的、抽象的或重写的。
12、在 C#中如何实现多态?
“多态性”指定义具有功能不同但名称相同的方法或属性的多个类的能力,这些类可由客户端 代码在运行时交换使用。也就是由重载和重写实现多态。重载一般是同一类中的一组同名方 法,但签名。重写主要是在继承中体现,就是在基类中定义方法并在派生类中使用新实现重
写它们。
13、什么是反射?如何实现反射?
委托提供了封装方法的方式,事件是某动作已发生的说明,事件是建立于委托之上的。 (1)程序运行时同一个委托能够用来调用不同的方法只要改变它引用的方法即可。
(2)同一个委托能够用来调用不同的方法,只要改变它引用的方法即可,因此委托调节器 用的方法不是在编译时决定的,而是在运行时确定的。
18、一个类中有几种元素?
类由字段、属性、方法组成。
19、请解释这种语法现象
Session["name"] = 20; 1 给类的索引器赋值。
20、一个构造函数能否调用另一个构造函数,如果能请写出简单
代码?
能。
class Class1 {
int y; public Class1() {
new Class1(5); } public Class1(int i) {
8、结构体是值类型还是引用类型?
是值类型
9、装箱与拆箱是什么含义?
装箱是值类型到 object 类型(引用类型)或到该值类型所实现的任何接口类型的隐式转换。 将一个值类型的值装箱会分配一个对象实例并将该值复制到新的对象中。 拆箱是从 object 类型(引用类型)到值类型或从接口类型到实现该接口的值类型的显示转 换,拆箱包括: (1)检查对象实例,确保它是给定值类型的一个装箱值。 (2)将该值从实例复制到值类型变量中。
反射提供了访问程序集、模块和类型信息的一种机制。您可以使用反射动态的创建类型的实 例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访 问 其字段和属性。通过反射命名空间中的类以及 System.Type,您可以获取有关已加载的程序 集和在其中定义的类型(如类、接口和值类型)的信息。您也可以使用反射在运行时创建 类 型实例,然后调用和访问这些实例。
2、请解释 virtual 的含义?
virtual 关键字用于修改方法和属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚 拟成员的实现可由派生类中的重写成员更改。 调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成 员,如果没有派生类重写该成员,则它可能是原始成员。默认情况下,方法是非虚拟的。 不能重写非虚方法。不能将 virtual 修饰符与以下修饰符一起使用:static、abstract、override。 除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。 (1)在静态属性上使用 virtual 修饰符是错误的。 (2)通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。
15、程序集与命名空间有什么不同?
命名空间是用于避免命名冲突,专用于组织代码,当代码要在其他某个应用程序中重用时, 可以降低复杂性。 程序集是重用代码的一种方式,通常对应一个工程类库(dll),在一个程序集中可以有属于 不同命名空间的类和接口。可以将相同命名空间中的类部署到不同的程序集中,也可以将不 同命名空间中的类部署到一个程序集中。
23、C#中有很多类被定义为 public 有什么意义?
public 关键字将公共访问权限授予一个或多个被声明的编程元素。对公共元素的可访问性没 有限制。
24、internal 修饰符有什么含义?
internal 关键字是类型和类型成员的访问修饰符。内部成员只有在同一程序集中的文件内才 是可访问的。内部访问通常用于基于组件的开发,因为它使用一组组件能够以私有方式进行 合作,而不必向应用程序代码的其余部分公开。例如,用于生成图形用户界面的框架可以提 供“控件”类和“窗体”类,这些类通过使用具有内部访问能力的成员进行合作。由于这些成 员 是内部的,它们不向正在使用框架的代码公开。在定义具有内部访问能力的成员的程序集外 部引用该成员是错误。
10、没有经过装箱的对象可不可以拆箱?
不 能 。 但 是 可 以 通 过 类型 转换 实 现对 象 值向 值类 型 变量 的 转化,比如 Convert.ToXXX(obj.ToString());和 int.TryParse();
11、C#中有没有静态构造函数,如果有是做什么用的?
有。静态构造函数用于初始化类。在创建第一个实例或引用任何静态成员之前,将自动调用 静态构造函数来初始化类。静态构造函数既没有访问修饰符,也没有参数。在创建第一个实 例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造 函数。在程序中,用户无法控制何时执行静态构造函数。 静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入 项。
相关文档
最新文档