50个常见的C#面试问题和答案合集和详解

2021年11月10日20:50:13 发表评论 5,229 次浏览

C#面试题合集:C# 是一种现代的、面向对象的通用编程语言。它是由微软在 .NET 倡议下开发的。在这里,我们已经涵盖了前 50 名 C# 面试问题及其答案。这些是 C# 面试中的常见面试问题,专为新生设计。让我们开始吧。

1.什么是C#?

C#面试问题和答案合集:C# 是一种面向对象的现代编程语言,由 Microsoft 创建。它在 .NET Framework 上运行。C# 非常接近C / C++ 和Java 编程语言。该语言被提议为一种简单、现代、通用、面向对象的编程语言。该语言用于创建软件组件。

2. C#C 编程语言有何不同

3. C#常见问题和解析:什么是公共语言运行时 (CLR)?

CLR 是 .NET Framework 的基本和虚拟机组件。它是 .NET Framework 中的运行时环境,它运行代码并通过提供各种服务(例如远程处理、线程管理、类型安全、内存管理、健壮性等)来帮助简化开发过程。基本上,它是负责管理 .NET 程序的执行,而不考虑任何 .NET 编程语言。它还有助于代码管理,因为以运行时为目标的代码称为托管代码,而不以运行时为目标的代码称为非托管代码。要了解更多信息,请参阅相应的文章:公共语言运行库。

4. C# .NET 中的索引器是什么?

索引器在 C# 中被称为智能数组。它允许以与数组相同的方式索引类的实例。要了解更多信息,请参阅文章:C#索引

5.什么是JIT编译过程?

即时编译器 (JIT) 是 .NET 中公共语言运行时 (CLR) 的一部分,它负责管理 .NET 程序的执行,而不管使用任何 .NET 编程语言。特定于语言的编译器将源代码转换为中间语言。然后,这种中间语言由实时 (JIT) 编译器转换为机器代码。此机器代码特定于运行 JIT 编译器的计算机环境。要了解更多信息,请参阅文章:什么是刚刚在实时(JIT)编译器在.NET

6. C# 中的垃圾回收是什么?

C#常见的面试题和答案有哪些?.NET Framework 中的垃圾收集使自动内存管理成为可能。在运行时创建类对象时,会在堆内存中为其分配一定的内存空间。但是,在程序中完成了所有与对象相关的动作后,分配给它的内存空间是一种浪费,无法使用。在这种情况下,垃圾收集非常有用,因为它会在不再需要内存空间后自动释放内存空间。 

垃圾收集将始终在托管堆上工作,并且在内部它有一个引擎,称为优化引擎。如果满足多个条件中的至少一个,则会发生垃圾收集。这些条件如下:

  • 如果系统物理内存不足,则需要进行垃圾回收。
  • 如果堆内存中分配给各个对象的内存超过预先设定的阈值,就会发生垃圾回收。
  • 如果调用 GC.Collect 方法,则会发生垃圾回收。但是,此方法仅在异常情况下调用,因为通常垃圾收集器会自动运行。

要了解更多信息,请参阅相应的文章: 在C#中垃圾收集

7. C#中的类有哪些类型?

  • 抽象类
  • 部分类
  • 密封类
  • 静态类

8. C#抽象类和接口有什么区别?

9. C#中的扩展方法是什么?

在 C# 中,扩展方法的概念允许你在现有的类或结构中添加新的方法,而无需修改原始类型的源代码,并且不需要原始类型的任何特殊许可,也不需要重新编译原始类型。它是在 C# 3.0 中引入的。要了解更多信息,请参阅文章:C# 中的扩展方法

10.什么是继承?C# 支持多重继承吗?

C#常见问题和解析:继承是OOP(Object Oriented Programming)的一个重要支柱。它是 C# 中允许一个类继承另一个类的特性(字段和方法)的机制。

  • 超类:其特征被继承的类称为超类(或基类或父类)。
  • 子类:继承另一个类的类称为子类(或派生类、扩展类或子类)。除了超类的字段和方法之外,子类还可以添加自己的字段和方法。
  • 可重用性:继承支持“可重用性”的概念,即当我们想要创建一个新类并且已经有一个包含我们想要的一些代码的类时,我们可以从现有类中派生出我们的新类。通过这样做,我们正在重用现有类的字段和方法。

C# 不支持多类继承要了解更多信息,请参阅相应的文章: 继承在C#

11. C#面试问题和答案合集:什么是托管或非托管代码? 

编写旨在获取托管运行时环境执行服务(如 .NET Framework 中的 CLR(公共语言运行时))的代码称为托管代码。它始终由托管运行时环境实现,而不是由操作系统直接执行。托管运行时环境提供不同类型的服务,如垃圾收集、类型检查、异常处理、边界检查等,可以在不受程序员干扰的情况下自动编码。它还为代码提供内存分配、类型安全等。应用程序是用 Java、C#、VB.Net 等语言编写的,总是针对运行时环境服务来管理执行,用这些类型的语言编写的代码称为托管代码。

由操作系统直接执行的代码称为非托管代码。它始终针对处理器架构并依赖于计算机架构。编译此代码时,它总是倾向于获得特定的架构并始终在该平台上运行,换句话说,每当你想为不同的架构执行相同的代码时,你都必须根据该架构再次重新编译该代码。它始终编译为特定于架构的本机代码。要了解更多信息,请参阅相应的文章:托管和非托管代码 

12. C#中的struct和class有什么区别? 

类是用户定义的蓝图或原型,从中创建对象。基本上,一个类将字段和方法(定义动作的成员函数)组合成一个单元。

结构体是单个单元下不同数据类型的变量的集合。它几乎类似于一个类,因为两者都是用户定义的数据类型,并且都包含一堆不同的数据类型。要了解更多信息,请参阅相应的文章: struct和class在C#

13. C#中的枚举是什么? 

枚举(或枚举)是 C# 中的一种值数据类型。它主要用于将名称或字符串值赋给整数常量,使程序易于阅读和维护。例如,一副扑克牌中的 4 个花色可能是名为 Club、Diamond、Heart 和 Spade 的 4 个枚举器,属于名为 Suit 的枚举类型。其他示例包括自然枚举类型(如行星、星期几、颜色、方向等)。enum 的主要目的是定义我们自己的数据类型(Enumerated Data Types)。枚举是直接在命名空间、类或结构中使用 enum 关键字声明的。要了解更多信息,请参阅相应的文章:枚举在C#

14. C#面试题合集ref 和 out 关键字有什么区别?

ref 是 C# 中的关键字,用于通过引用传递参数。或者我们可以说,如果在方法中对这个参数所做的任何更改将在控件返回到调用方法时反映在该变量中。ref 参数不传递属性。

out 是 C# 中的一个关键字,用于将参数作为引用类型传递给方法。通常在一个方法返回多个值时使用。out 参数不传递该属性。要了解更多信息,请参阅相应的文章:ref和out关键字

15. 什么是 C# 中的装箱和拆箱?

装箱和拆箱是 C# 中的一个重要概念。C# 类型系统包含三种数据类型:值类型(int、char 等)、引用类型(对象)和指针类型。基本上,它将值类型转换为引用类型,反之亦然。装箱和拆箱实现了类型系统的统一视图,其中任何类型的值都可以被视为一个对象。

C#中的拳击

  • 将值类型(char、int 等)转换为引用类型(对象)的过程称为装箱。
  • 装箱是使用对象类型(超类型)的隐式转换过程。
  • 值类型始终存储在堆栈中。引用类型存储在堆中。

在 C# 中拆箱

  • 将引用类型转换为值类型的过程称为拆箱。
  • 这是一个显式的转换过程。

要了解更多信息,请参阅文章:C# -装箱和拆箱

16. C#中的属性是什么?

属性是特殊类型的类成员,它提供了一种灵活的机制来读取、写入或计算私有字段的值。属性可以像公共数据成员一样使用,但它们实际上是称为访问器的特殊方法。这使数据可以轻松访问,并有助于提高方法的灵活性和安全性。也可以使用属性来实现信息的封装和隐藏。它使用预定义的方法,即“get”和“set”方法,这些方法有助于访问和修改属性。

访问器: “set”和“get”块被称为“访问器”。限制财产的可访问性非常重要。有两种类型的访问器,即 get 访问器和 set 访问器。基于“get”和set访问器有不同类型的属性:

  • 读取和写入属性:当属性同时包含 get 和 set 方法时。
  • 只读属性:当属性只包含 get 方法时。
  • 只写属性:当属性只包含 set 方法时。
  • 自动实现的属性:当属性访问器中没有额外的逻辑时,它在 C# 3.0 中引入。要了解更多信息,请参阅相应的文章:属性在C#

17. C# 中的分部类是什么?

分部类是 C# 的一个特殊功能。它提供了将单个类的功能实现到多个文件中的特殊能力,并且在编译应用程序时将所有这些文件合并到一个类文件中。分部类是通过使用 partial 关键字创建的。此关键字还可用于将方法、接口或结构的功能拆分为多个文件。

public partial Class_name  

{

       // Code 

}

要了解更多信息,请参阅相应的文章:部分类在C#

18. C#中后期绑定和早期绑定有什么区别?

C#常见问题和解析:当对象被分配给特定类型的对象变量时,C# 编译器会在 .NET Framework 的帮助下执行绑定。C# 执行两种不同类型的绑定,它们是:

  • 早期绑定
  • 后期绑定或动态绑定

它在编译时识别并检查方法或属性。在这个绑定中,编译器已经知道它是什么类型的对象以及它持有的方法或属性是什么,这里的对象是静态对象。早期绑定的性能很快,并且易于编码。它减少了运行时错误的数量。

在后期绑定中,编译器不知道它是什么类型的对象,它持有什么方法或属性,这里的对象是动态对象。对象的类型是根据它在运行时保存在右侧的数据来决定的。基本上,后期绑定是通过使用虚拟方法来实现的。后期绑定的性能比早期绑定慢,因为它需要在运行时进行查找。要了解更多信息,请参阅相应的文章:早期绑定和后期绑定

19. 在 C# 中重载方法有哪些不同的方式?

方法重载是实现多态的常用方法。它是一种以多种形式重新定义函数的能力。用户可以通过在一个类中定义两个或多个共享相同名称的函数来实现函数重载。C# 可以区分具有不同方法签名的方法。即,同一类中的方法可以具有相同的名称但具有不同的参数列表(即参数的数量、参数的顺序和参数的数据类型)。

  • 根据作为参数传递给方法的参数的数量和类型来区分重载方法。
  • 你不能定义多个具有相同名称、顺序和参数类型的方法。这将是一个编译器错误。
  • 编译器在区分重载方法时不考虑返回类型。但是你不能声明两个具有相同签名和不同返回类型的方法。它会抛出一个编译时错误。如果两种方法的参数类型相同,但返回类型不同,则不可能。要了解更多信息,请参阅相应的文章:方法重载在C#

20. C#面试问题和答案合集:什么是 C# 中的反射?

反射是描述代码中类型、方法和字段的元数据的过程。命名空间系统。反射使你能够获取有关加载的程序集及其中的元素(如类、方法和值类型)的数据。要了解更多信息,请参阅相应的文章:反思C#

21. C#中常量和只读有什么区别

在 C# 中,const 关键字用于声明常量字段和常量局部。常量字段的值在整个程序中是相同的,或者换句话说,一旦常量字段被分配,该字段的值就不会改变。在 C# 中,常量字段和局部变量不是变量,常量是数字、字符串、空引用、布尔值。readonly 关键字用于声明只读变量。这个 readonly 关键字表明你只能在声明变量时或在声明变量的同一类的构造函数中分配变量。要了解更多信息,请参阅相应的文章:常数和只读在C#
 
22,可在多个catch块被执行?

catch 块的主要目的是处理在 try 块中引发的异常。该块仅在程序中引发异常时才会执行。在 C# 中,你可以将多个 catch 块与 try 块一起使用。通常,多个 catch 块用于处理不同类型的异常,即每个 catch 块用于处理不同类型的异常。如果你对同一类型的异常使用多个 catch 块,那么它会给你一个编译时错误,因为 C# 不允许你对同一类型的异常使用多个 catch 块。catch 块总是在 try 块之前。

通常,catch 块按照它们在程序中出现的顺序进行检查。如果给定的异常类型与第一个 catch 块匹配,则执行第一个 catch 块并忽略其余的 catch 块。如果起始 catch 块不适合异常类型,则编译器搜索下一个 catch 块。要了解更多信息,请参阅文章:多catch块在C#

23. 什么是锯齿状数组?

锯齿状数组是一个数组数组,使得成员数组可以具有不同的大小。换句话说,每个数组索引的长度可以不同。Jagged Array 的元素是引用类型,默认初始化为null。Jagged Array 也可以与多维数组混合使用。在这里,行数将在声明时固定,但你可以改变列数。要了解更多信息,请参阅相应的文章:在C#中交错数组

24. 什么 系统。String 和 System.Text.StringBuilder 类?

C# StringBuilder 类似于 Java StringBuilder。String 对象是不可变的,即 String 一经创建便无法更改。每次使用系统的任何方法时。String 类,然后你在内存中创建一个新的字符串对象。例如,字符串“GeeksForGeeks”在堆中占用内存,现在,将初始字符串“GeeksForGeeks”更改为“GFG”将在内存堆上创建一个新的字符串对象,而不是修改同一内存位置的初始字符串。在需要对字符串执行重复修改的情况下,我们需要 StringBuilder 类。为了避免在初始字符串中替换、追加、删除或插入新字符串,C# 引入了 StringBuilder 概念。StringBuilder 是一个动态对象。要了解更多信息,请参阅相应的文章: System.String和System.Text.StringBuilder在C#

25. System.Array.CopyTo() 和 System.Array.Clone() 有什么区别?

System.Array.CopyTo() 技术将组件的副本复制到另一个现有数组中。它将一个集群的组件复制到另一个现有阵列。Clone() 技术返回一个新的数组对象,其中包含第一个数组中的每个组件。Clone() 将一个数组复制为一个对象,因此在使用它之前应该将其转换为真正的展示类型。克隆与第一个数组的类型相似。  

26. C#中的dispose和finalize方法有什么区别?

dispose() 和 finalize() 之间的主要区别在于 dispose() 必须由用户显式调用,而 finalize() 在对象被销毁时由垃圾收集器调用。

27. C# 中的委托是什么?

委托是一个引用方法的对象,或者你可以说它是一个引用类型变量,可以保存对方法的引用。C# 中的委托类似于C/C++ 中的函数指针。它提供了一种方法,可以告诉在触发事件时要调用哪个方法。例如,如果单击窗体(Windows 窗体应用程序)上的按钮,程序将调用特定方法。简单来说,它是一种类型,它表示对具有特定参数列表和返回类型的方法的引用,然后在程序中调用该方法以在需要时执行。要了解更多信息,请参阅相应的文章:代表在C# 

28. C#中什么是密封类?

C#常见的面试题和答案有哪些?密封类用于限制用户继承该类。可以使用sealed关键字来密封一个类。关键字告诉编译器该类是密封的,因此不能扩展。不能从密封类派生任何类。

以下是密封类的语法

sealed class class_name
{
    // data members
    // methods
    .
    .
    .

}

方法也可以被密封,在这种情况下,该方法不能被覆盖。但是,方法可以密封在它们被继承的类中。如果你想将一个方法声明为密封的,那么它必须在其基类中声明为虚拟的。要了解更多信息,请参阅相应的文章:密封类在C#

29. C#中的构造函数链是什么? 

我们可以使用 this 关键字从另一个构造函数调用重载的构造函数,但构造函数必须属于同一个类,因为 this 关键字指向使用 this 的同一个类的成员。这种调用重载构造函数也称为构造函数链。要了解更多信息,请参阅相应的文章:构造链接
 
30.什么是C#中的多播委托?

委托的多播是普通委托的扩展(有时称为单播委托)。它帮助用户在一次调用中指向多个方法。

31. 什么是 C# 中的泛型?

C#面试题合集:泛型是一个允许用户使用占位符定义类和方法的类。泛型已添加到 C# 语言的 2.0 版中。使用泛型背后的基本思想是允许类型(整数、字符串等,以及用户定义的类型)作为方法、类和接口的参数。集合的主要限制是缺乏有效的类型检查。这意味着你可以将任何对象放入集合中,因为 C# 编程语言中的所有类都从对象基类扩展而来。这会损害类型安全,并且与 C# 作为类型安全语言的基本定义相矛盾。此外,使用集合涉及显式和隐式类型转换形式的显着性能开销,这是从集合中添加或检索对象所需的。要了解更多信息,请参阅相应的文章:泛型在C# 3 2.描述访问修饰符在C#中?
 

访问修饰符是定义程序中成员、类或数据类型的可访问性的关键字。这些主要用于限制外部程序或类对不需要的数据进行操作。有4 个访问修饰符(public、protected、internal、private),它们定义了6 个可访问性级别,如下所示:

  • 公共
  • 私人的
  • 私人保护
  • 受保护
  • 内部的
  • 受保护的内部

33. C#中的虚方法是什么?

在 C# 中,虚方法是一种可以在派生类中重新分类的策略。我们可以在基类和派生类中实现虚方法。当方法的基本工作相似但在某些情况下派生类需要附加功能时,就会使用它。虚方法在父类中声明,可以在子类中重写。我们使用 virtual 关键字在基类中创建一个虚拟方法,并在派生类中使用 Override 关键字覆盖该方法。不必每个派生类都继承一个虚方法,但必须在基类中创建一个虚方法。因此,虚方法也称为多态。要了解更多信息,请参阅文章:虚拟方法在C#

34. .NET 的多线程是什么?

多线程是在单个进程中包含多个线程的进程。这里每个线程执行不同的活动。例如,我们有一个类,这个调用包含两个不同的方法,现在使用多线程,每个方法都由一个单独的线程执行。所以多线程的主要优点是它同时工作,这意味着多个任务同时执行。并且最大限度地提高了 CPU 的利用率,因为多线程采用分时概念,这意味着每个线程都有自己的执行时间,并且不会影响另一个线程的执行,这个时间间隔是由操作系统给定的。要了解更多信息,请参阅文章:多线程在C#

35. C#中的哈希表类是什么?

Hashtable 类表示基于键的哈希码组织的键/值对的集合。这个类属于系统。 集合命名空间。Hashtable 类提供了各种类型的方法,用于对哈希表执行不同类型的操作。在 Hashtable 中,键用于访问集合中存在的元素。对于非常大的 Hashtable 对象,你可以在 64 位系统上将最大容量增加到 20 亿个元素。

36. 什么是 C# 中的 LINQ?

C#常见问题和解析:LINQ 被称为语言集成查询,它是在.NET 3.5和 Visual Studio 2008 中引入的。LINQ 的美妙之处在于它提供了.NET语言(如C#、VB.NET 等)生成查询以检索数据的能力从数据源。例如,一个程序可能会从学生记录中获取信息或访问员工记录等。在过去几年中,此类数据与应用程序存储在单独的数据库中,你需要学习不同类型的查询语言才能访问此类数据,如 SQL、XML 等。而且你不能使用 C# 语言或任何其他.NET语言创建查询。

为了克服此类问题,Microsoft 开发了 LINQ。它为 C# 或.NET语言附加了一种更强大的功能,以生成对任何 LINQ 兼容数据源的查询。最好的部分是无论使用哪种类型的数据源,用于创建查询的语法都是相同的,这意味着在关系数据库中创建查询数据的语法与用于创建存储在数组中的查询数据的语法相同不需要使用 SQL 或任何其他非 .NET语言机制。你还可以将 LINQ 与 SQL、XML 文件、ADO.NET、Web 服务以及任何其他数据库一起使用。要了解更多信息,请参阅相应的文章: LINQ在C#

37. 为什么在 C# 中不能覆盖私有虚拟方法?

因为私有虚拟方法在类之外是不可访问的。

38. 什么是 C# 中的文件处理?

C#面试问题和答案合集:通常,文件用于存储数据。术语文件处理是指各种操作,如创建文件、读取文件、写入文件、追加文件等。文件处理中最常用的两个基本操作是文件的读取和写入。当我们打开文件进行读写时,文件就变成了流。流是用于通信的字节序列。从文件可以形成两个流,一个是用于读取文件的输入流,另一个是用于写入文件的输出流。在 C# 中,System.IO命名空间包含处理输入和输出流并提供有关文件和目录结构的信息的类。

39. 列出常用的异常类型?

异常是在运行时发生的错误。使用 C# 的异常处理子系统,我们可以以结构化和受控的方式处理运行时错误。异常处理的主要优点是它自动化了大部分错误处理代码。异常处理也很重要,因为 C# 定义了常见程序错误的标准异常,例如被零除或索引超出范围。

C# 异常及其含义:

  • ArrayTypeMismatchException:当存储的值的类型与数组的类型不兼容时,就会出现此异常。
  • DivideByZeroException:当用户试图将一个整数值除以零时出现。
  • IndexOutOfRangeException:当数组索引越界时,发生异常。
  • InvalidCastException: 运行时强制转换无效。
  • OutOfMemoryException: 可用内存不足,无法继续执行程序。
  • 溢出异常:发生算术溢出。
  • NullReferenceException:尝试对空引用进行操作,即不引用对象的引用。

40.是什么“为” C#运营商之间的“是”和区别?

C# 包括三个支持运行时类型识别的关键字:isastypeof。 

is 运算符:我们可以使用is 运算符确定对象是否属于特定类型。它的一般形式如下所示:

expr 是类型

这里,expr 是一个表达式,它描述了一个对象,其类型正在根据类型进行测试 如果expr的类型与 type 相同或兼容 则此操作的结果为真。否则就是假的。因此,如果结果为真,则expr 是类型的一种形式因为它适用于is,所以如果一种类型与另一种类型是等价的,或者如果存在引用、装箱或拆箱转换,则一种类型与另一种类型兼容。

作为运算符:有时如果我们想在运行时尝试转换,但如果转换失败(使用强制转换时就是这种情况)不抛出异常。为此,请使用as 运算符,它具有以下一般形式:

expr 作为类型

这里,expr 是被转换为类型的表达式 如果转换成功,则 返回对type的引用。否则,将返回空引用。的作为 操作者可以被用于执行仅参考,拳击,拆箱,或身份转换。在 运营商提供了一个简化的替代 在某些情况下。

41. C#中的单例设计模式是什么?

C#中的单例设计模式是一种常见的设计模式。在这种模式中,一个类在程序中只有一个实例,可以对其进行全局访问。或者我们可以说单例是一个类,它只允许创建自己的一个实例,并且通常可以简单地访问该实例。

在 C# 中执行单例设计有不同的方法。接下来是单例设计的常规属性。  

  • 私有并参数化单个构造函数
  • 密封类。
  • 用于保存对单个示例的引用的静态变量
  • 获取对已制作示例的引用的公共和静态方法。

42.如何在C#中实现单例设计模式?

我们可以使用以下方法在 C# 中实现单例设计模式:

  • 没有线程安全的单例。
  • 线程安全单例。
  • 使用双重检查锁定的线程安全单例。
  • 没有锁的线程安全。
  • 使用 .NET 4 的 Lazy<T> 类型。

43. C#中的元组是什么?

元组这个词的意思是“由多个部分组成的数据结构”。因此元组是一种数据结构,它为你提供了表示具有多个可能/可能不相关的多个值的数据集的最简单方法。它是在 .NET Framework 4.0 中引入的。在元组中,你可以添加从 1 到 8 的元素。如果你尝试添加大于 8 的元素,则编译器将抛出错误。元组通常用于创建包含具有属性的对象的数据结构,并且不想为此创建单独的类型。阅读更多。请参考文章:C#中的元组

44. 什么是事件?

一个事件是发生了某种措施的通知。委托和事件是相关的,因为事件是建立在委托之上的。两者都扩展了可以应用 C# 的编程任务集。这是一个重要的 C# 特性,它建立在委托的基础上:事件。 事件本质上是某种动作发生的自动通知。事件是这样工作的:

对事件感兴趣的对象会为该事件注册一个事件处理程序。当事件发生时,所有注册的处理程序都会被调用。事件处理程序由委托表示。

 事件是类的成员,使用event 关键字声明。其最常用的形式如下所示:

事件事件委托事件名称

 这里,event-delegate 是用于支持事件的委托的名称,而event-name 是正在声明的特定事件对象的名称。

45. Dispose() 和 Finalize() 方法有什么区别?

两种方法的主要区别在于 Dispose() 方法用于释放对象的非托管资源,而 Finalize 也用于相同目的,但不保证对象的垃圾回收。另一个主要区别是 dispose() 方法由用户显式调用,而 finalize() 方法由垃圾收集器调用,就在对象被销毁之前。

46、C#面试题合集Array和ArrayList有什么区别?

数组是一组由通用名称引用的类似类型的变量。ArrayList 表示可以单独索引的对象的有序集合。它基本上是数组的替代品。以下是主要区别

50个常见的C#面试问题和答案合集和详解

要了解更多相关信息,请参阅C# – Array vs ArrayList

47.用 C# 写泛型的特性?

C#常见的面试题和答案有哪些?泛型是一种可以通过多种方式改进你的程序的技术,例如:

  • 它可以帮助你实现代码重用、性能和类型安全。
  • 你可以创建自己的通用类、方法、接口和委托。
  • 你可以创建通用集合类。.NET Framework 类库在 System.Collections.Generic 命名空间中包含许多新的泛型集合类。
  • 你可以在运行时获取有关泛型数据类型中使用的类型的信息。

 48. C#中SortedList和SortedDictionary的区别。

C#常见问题和解析:SortedList 根据键排序的键/值对的集合。默认情况下,此集合按升序对键/值对进行排序。它具有通用和非通用类型的集合。 

SortedDictionary 一个通用集合,用于以排序的形式存储键/值对,并在键上完成排序。 

以下是 SortedList 和 SortedDictionary 之间的一些区别:
 

50个常见的C#面试问题和答案合集和详解

要了解更多相关信息,你可以参考C# 中的 SortedList 和 SortedDictionary 之间的差异

49. C#面试问题和答案合集C# 中的命名空间是什么?

它提供了一种使一组名称(如类名)与其他名称组不同的方法。使用命名空间的最大优点是在一个命名空间中声明的类名不会与在另一个命名空间中声明的相同类名发生冲突。它也被称为具有共同特征的命名类组。要阅读有关此内容的更多信息,请参阅C# 中的命名空间

50. 谁可以成为 C# 中命名空间的成员?

命名空间的成员可以是命名空间、接口、结构和委托。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: