针对经验和应届生的 50 大 C# 面试问题和答案(2021 年更新)
C# 是一种通用编程语言,它涵盖了各种学科,如面向对象编程、静态类型、面向组件的编程、强类型等。C# 广泛用于 ASP.NET 框架中,用于创建网站、Web 应用程序和游戏。 C# 编程在世界各地都有大量机会。如果您正在考虑在 C# 编程方面建立职业生涯,您需要参加一次面试,在面试中您将被问到几个 C# 基础到 C# 棘手的面试问题和答案,如下所列。
这是一个精选的 C# 面试问题和答案的精选列表,这些问题和答案很可能在面试中被问到。根据候选人的经验和其他各种因素,候选人可能会被问到从基本 C# 面试问题到高级 C# 面试问题。此列表涵盖了所有针对应届生的 C 语言面试问题以及针对经验丰富的专业人士的 C# 面试问题。
免费PDF下载:C#面试面试题
针对应届生和 2/3/5/10 年经验的 C# 面试问题和答案
以下是一些常见的面试问题,适合应届生和有经验的 C# 开发人员候选人找到合适的工作。
我们已经涵盖了 50 多个基本到高级的 C# 面试常见问题和答案
应届生的 C# 基本面试问题
- 什么是 C#?
- 用例子解释 C# 中的注释类型
- 可以执行多个 catch 块吗?
- public、static 和 void 有什么区别?
- 什么是对象?
- 定义构造函数
- 什么是锯齿状数组?
- ref和out参数有什么区别?
- C#中的“using”语句有什么用?
- 什么是序列化?
1。什么是 C#?
C# 是一种面向对象、类型安全和托管的语言,由 .Net 框架编译以生成 Microsoft 中间语言。
2。用例子解释 C# 中的注释类型
单行
示例:
//This is a single line comment
ii.多行 (/* */)
示例:
/*This is a multiple line comment We are in line 2 Last line of comment*/
iii. XML 注释 (///)。
例如:
/// summary; /// Set error message for multilingual language. /// summary
3。可以执行多个catch块吗?
不,不能执行多个类似类型的 catch 块。一旦执行了适当的 catch 代码,控制权就会转移到 finally 块,然后执行 finally 块之后的代码。
4。 public、static和void有什么区别?
公共声明的变量或方法可以在应用程序的任何地方访问。静态声明的变量或方法无需创建类的实例即可全局访问。静态成员默认情况下不可全局访问,它取决于所使用的修改访问类型。编译器将方法的地址存储为入口点,并在创建任何对象之前使用此信息开始执行。而 Void 是一个类型修饰符,表示方法或变量不返回任何值。
5。什么是对象?
<中心>
<图>C#中的对象
图>
对象是一个类的实例,我们通过它访问该类的方法。 “New”关键字用于创建对象。在内存中创建对象的类将包含有关该类的方法、变量和行为的信息。
6。定义构造函数
构造函数是类中与其类同名的成员函数。每当创建对象类时,都会自动调用构造函数。它在初始化类的同时构造数据成员的值。
7。什么是锯齿状数组?
具有数组类型元素的数组称为锯齿数组。元件可以具有不同的尺寸和大小。我们也可以将 jagged Array 称为数组的 Array。
8。 ref和out参数有什么区别?
作为 ref 传递的参数必须在传递给方法之前初始化,而 out 参数在传递给方法之前不需要初始化。
9。 C#中的“using”语句有什么用?
“using”块用于获取资源并对其进行处理,然后在块执行完成时自动处置。
10.什么是序列化?
当我们想通过网络传输对象时,我们必须将对象转换为字节流。将对象转换为字节流的过程称为序列化。对于要序列化的对象,它应该实现 ISerialize 接口。反序列化是从字节流创建对象的逆过程。
11.我们可以在静态方法中使用“this”命令吗?
我们不能在静态方法中使用“This”,因为我们只能在静态方法中使用静态变量/方法。
12.常量和只读有什么区别?
常量变量在编译时声明和初始化。之后无法更改该值。只有当我们想在运行时赋值时才使用只读。
3/5/10 年经验的 C# 高级面试问题
13.什么是接口类?举一个例子
接口是一个只有公共抽象方法的抽象类,方法只有声明,没有定义。这些抽象方法必须在继承的类中实现。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { interface Guru99Interface { void SetTutorial(int pID, string pName); String GetTutorial(); } class Guru99Tutorial : Guru99Interface { protected int TutorialID; protected string TutorialName; public void SetTutorial(int pID, string pName) { TutorialID = pID; TutorialName = pName; } public String GetTutorial() { return TutorialName; } static void Main(string[] args) { Guru99Tutorial pTutor = new Guru99Tutorial(); pTutor.SetTutorial(1,".Net by Guru99"); Console.WriteLine(pTutor.GetTutorial()); Console.ReadKey(); } } }
14.什么是值类型和引用类型?
值类型在其自己的内存空间中保存数据值。例子
int a = 30;
引用类型存储存储值的对象的地址。它是指向另一个内存位置的指针。
string b = "Hello Guru99!!";
15.什么是自定义控件和用户控件?
自定义控件是作为编译代码 (Dll) 生成的控件,它们更易于使用并且可以添加到工具箱中。开发人员可以将控件拖放到他们的 Web 表单中。属性可以,在设计时。我们可以轻松地将自定义控件添加到多个应用程序(如果共享 Dll)。因此,如果它们是私有的,那么我们可以将它们复制到 dll 到 web 应用程序的 bin 目录中,然后添加引用并可以使用它们。
用户控件与 ASP 包含文件非常相似,并且易于创建。用户控件不能放置在工具箱中并从其中拖放。他们有自己的设计和代码隐藏。用户控件的文件扩展名为 ascx。
16. C# 中的密封类是什么?
当我们想要限制类被继承时,我们创建密封类。用于防止从类派生的密封修饰符。如果我们强行指定一个密封类作为基类,则会出现编译时错误。
17.什么是方法重载?
方法重载是在同一个类中创建多个具有相同名称且具有唯一签名的方法。我们在编译的时候,编译器会使用重载决议来决定具体调用的方法。
18. Array和Arraylist有什么区别?
在一个数组中,我们只能有相同类型的项目。比较时数组的大小是固定的。数组列表类似于数组,但没有固定大小。
19.私有虚方法可以被覆盖吗?
不,因为它们在课堂外无法访问。
20。描述可访问性修饰符“受保护的内部”。
受保护的内部变量/方法可以在同一个程序集中访问,也可以从从该父类派生的类中访问。
21. System.String 和 System.Text.StringBuilder 类有什么区别?
System.String 是不可变的。当我们修改一个字符串变量的值时,新的内存被分配给新的值,之前的内存分配被释放。 System.StringBuilder 被设计为具有可变字符串的概念,其中可以执行各种操作,而无需为修改后的字符串分配单独的内存位置。
22. System.Array.CopyTo() 和 System.Array.Clone() 有什么区别?
使用 Clone() 方法,我们创建一个包含原始 Array 中所有元素的新数组对象,并使用 CopyTo() 方法。现有数组的所有元素都复制到另一个现有数组中。两种方法都执行浅拷贝。
23.我们如何对 Array 的元素进行降序排序?
使用 Sort() 方法,然后使用 Reverse() 方法。
24.写下捕获异常的 C# 语法
为了捕获异常,我们使用 try-catch 块。 Catch 块可以有 system.Exception 类型的参数。
例如:
try { GetAllData(); } catch (Exception ex) { }
在上面的例子中,我们可以省略 catch 语句中的参数。
25。接口和抽象类有什么区别?
接口具有所有只有声明但没有定义的方法。在抽象类中,我们可以有一些具体的方法。在接口类中,所有方法都是公共的。抽象类可能有私有方法。
26. Finalize() 和 Dispose() 方法有什么区别?
当我们希望一个对象随它们一起释放任何非托管资源时,就会调用 Dispose()。另一方面,Finalize() 用于相同的目的,但它不能保证对象的垃圾回收。
27.什么是循环引用?
循环引用是两个或多个资源相互依赖的情况,导致锁定条件,使资源不可用。
28. C#.NET 中的泛型是什么?
泛型用于制作可重用的代码类,以减少代码冗余、提高类型安全性和性能。使用泛型,我们可以创建集合类。要创建泛型集合,应使用 System.Collections.Generic 命名空间,而不是 System.Collections 命名空间中的 ArrayList 等类。泛型促进了参数化类型的使用。
29。 .NET 中的对象池是什么?
对象池是一个容器,其中包含可供使用的对象。它跟踪当前正在使用的对象,池中的对象总数。这减少了创建和重新创建对象的开销。
30。列出.net中常用的异常类型
ArgumentException、ArgumentNullException、ArgumentOutOfRangeException、ArithmeticException、DivideByZeroException、OverflowException、IndexOutOfRangeException、InvalidCastException、InvalidOperationException、IOEndOfStreamException、NullReferenceException、OutOfMemoryException、StackOverflowException 等。
31.什么是自定义异常?
有时有一些错误需要根据用户要求进行处理。自定义异常用于它们并且使用定义的异常。
32.什么是代表?
委托与 C++ 中的函数指针相同,但唯一的区别是它们是类型安全的,与函数指针不同。委托是必需的,因为它们可用于编写更通用的类型安全函数。
33.如何在 C# 中将一个类继承到其他类中?
冒号在 C# 中用作继承运算符。只需放置一个冒号,然后是类名。
公共类 DerivedClass :BaseClass
34. .net 中所有类都派生自的基类是什么?
System.Object
35。方法重写和方法重载有什么区别?
在方法覆盖中,我们更改了派生类中的方法定义,从而改变了方法的行为。方法重载就是在同一个类中创建一个同名但签名不同的方法。
36.重载方法有哪些不同的方式?
方法可以使用不同的参数数据类型、不同的参数顺序和不同的参数数量来重载。
37.为什么不能为接口内的方法指定可访问性修饰符?
在接口中,我们有没有方法定义的虚拟方法。所有方法都可以在派生类中被覆盖。这就是为什么它们都是公开的。
38.我们如何设置类被继承,但防止方法被覆盖?
将类声明为public,并将方法密封,以防止被覆盖。
39.如果继承的接口有冲突的方法名怎么办?
实施取决于您,因为该方法在您自己的类中。当来自不同接口的方法期望不同的数据时可能会出现问题,但只要编译器关心你就可以了。
40。 Struct 和 Class 有什么区别?
结构是值类型变量,类是引用类型。存储在堆栈上的结构会导致额外的开销,但检索速度会更快。结构体不能被继承。
41.如何在 .Net 中使用可为空的类型?
值类型可以采用它们的正常值或空值。这种类型称为可空类型。
Int? someID = null; If(someID.HasVAlue) { }
42。我们如何创建具有非默认值的数组?
我们可以使用 Enumerable.Repeat 创建一个具有非默认值的数组。
43。 c#中的“is”和“as”运算符有什么区别?
“is”运算符用于检查对象与给定类型的兼容性,并将结果作为布尔值返回。
“as”运算符用于将对象转换为类型或类。
44.什么是多播委托?
分配有多个处理程序的委托称为多播委托。每个处理程序都分配给一个方法。
45。 C# .NET 中的索引器是什么?
索引器在 C# 中称为智能数组。它允许以与数组相同的方式对类的实例进行索引。
例如:
public int this[int index] // Indexer declaration
46。 .NET 中的“throw”和“throw ex”有什么区别?
“Throw” 语句保留原始错误堆栈,而“throw ex” 具有来自其抛出点的堆栈跟踪。始终建议使用“throw”,因为它提供了更准确的错误信息。
47.什么是 C# 属性及其意义?
C# 为开发人员提供了一种在某些实体上定义声明性标签的方法,例如。类、方法等称为属性。可以在运行时使用反射来检索属性的信息。
48.如何在 C# 中实现单例设计模式?
在单例模式中,一个类只能有一个实例,并提供一个全局访问点。
例如:
Public sealed class Singleton { Private static readonly Singleton _instance = new Singleton(); }
49. directcast和ctype有什么区别?
DirectCast用于转换需要运行时类型与DirectCast中指定类型相同的对象类型。
Ctype用于在表达式和类型之间定义转换的转换。
50。 C# 代码是托管代码还是非托管代码?
C# 是托管代码,因为公共语言运行时可以将 C# 代码编译为中间语言。
51.什么是控制台应用程序?
控制台应用程序是可以在 Windows 的命令提示符下运行的应用程序。对于 .Net 的任何初学者来说,构建控制台应用程序是理想的第一步。
52.举一个从队列中移除元素的例子
dequeue 方法用于从队列中移除一个元素。
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DemoApplication { class Program { static void Main(string[] args) { Queue qt = new Queue(); qt.Enqueue(1); qt.Enqueue(2); qt.Enqueue(3); foreach (Object obj in qt) { Console.WriteLine(obj); } Console.WriteLine(); Console.WriteLine(); Console.WriteLine("The number of elements in the Queue " + qt.Count); Console.WriteLine("Does the Queue contain " + qt.Contains(3)); Console.ReadKey(); } } }
C语言