目录[隐藏][展示]
- 1. C#到底是什么?
- 2. C# 与 C 的区别是什么?
- 3. 究竟什么是类?
- 4. 究竟什么是对象?
- 5. 术语静态、公共和无效之间有什么区别?
- 6. 定义构造函数。
- 7.垃圾回收中的C#是什么?
- 8. C#中的结构到底是什么意思?
- 9. C# 代码是如何编译的?
- 10. 清楚地描述不同的 C# 类。
- 11. 什么是锯齿数组?
- 12、out和ref参数有什么区别?
- 13.在C#中,什么是析构函数?
- 14.在C#中,什么是索引器?
- 15. 托管代码和非托管代码有什么区别?
- 16. 描述序列化。
- 17. 在 C# 中,字段和属性之间有何不同?
- 18. 如何详细描述 C# 中的 using 语句?
- 19. 如何在同一个类中实现多个具有相同方法名的接口?
- 20.在C#中,Task和Thread有什么区别?
- 21. C#中的finalize函数是什么?
- 22. 区分finalize blocks和finalize。
- 23.详细描述C#的dispose方法。
- 24. 什么是 C# 方法重载? 阐发。
- 25. 只读和常量有什么区别?
- 26. 什么是用户控件和自定义控件?
- 27. 在 C# 中,什么是多播委托?
- 28. C#中的对象池究竟是什么?
- 29. C#.NET 中的泛型到底是什么?
- 30. 重写私有虚方法可行吗?
- 31. C#中方法重载和方法覆盖的区别?
- 32.在C#中,String和StringBuilder有什么区别?
- 33. 代表到底是什么?
- 34. 什么时候应该在 C# 中使用多线程,什么时候应该避免它?
- 35. 在 C# 中,什么是多播委托?
- 36.在C#中,后期绑定和早期绑定有什么区别?
- 37. Directcast和Ctype的区别?
- 38. C#中如何使用HashSet?
- 39. 请解释 C# 中的线程池。
- 40. C#中的Const和ReadOnly关键字有什么区别?
- 41. 您能提供有关 C# XSD 文件的哪些详细信息?
- 42. Get 和 Set Accessor 属性对您意味着什么?
- 43. C#中的依赖注入到底是什么?
- 结论
C#(以前称为 C sharp)是一种面向对象的编程语言,开发人员经常使用它来执行多项活动并实现多个目标。
面向对象的编程语言,例如 C++、Python 和 Java,有多种风格。 这些编程语言旨在在特定框架内运行。 同样,C# 是为特定框架(即 NET)创建和开发的。
.NET 框架由 微软. 它为开发应用程序、声明、应用程序指令等提供了一个广阔的平台。 C# 可用于 Web 开发、游戏、 移动应用程序、windows 应用程序和其他类似项目。
有了这些优势,C# 的使用范围扩大了,对能够准确使用它的专家的需求增加了一倍。 因为 C# 如此流行 编程语言,许多大大小小的公司都以此为基础。
因此,练习基本和高级 C# 问题以在面试中取得好成绩。
1. C#到底是什么?
Microsoft C# 是现代的、通用的、 面向对象的编程 语。 C# 适用于公共语言基础设施 (CLI),它包括可执行代码和运行时环境,可以在不同的计算机系统和体系结构上使用多种高级语言。
2. C# 与 C 的区别是什么?
C通常被称为过程语言,而C#更面向对象。 主要区别在于 C# 允许通过公共语言运行时 (CLR) 进行自动垃圾收集,而 C 则不允许。 C# 需要 .NET 框架才能运行,而 C 是独立于平台的语言。
3. 究竟什么是类?
类用作构建对象的模板。 除了技术,它还有属性。 从一个类中,我们可以产生一个对象的多个实例。
4. 究竟什么是对象?
称为对象的类实例是我们访问类功能的方式。 要构造一个对象,我们可以使用“new”关键字。 存储在内存中生成对象的类的函数、数据成员和行为。
5. 术语静态、公共和无效之间有什么区别?
程序中的任何地方都可以访问公开定义的变量。 静态变量可以全局访问,无需构建类实例。 在 C# 中,称为 Void 的类型修饰符用于指示方法的返回类型。
6. 定义构造函数。
构造函数是特定于类的成员函数。 当一个对象形成时,构造函数会被自动调用。 类在初始化时构造数据成员的所有值。
7.垃圾回收中的C#是什么?
清理已被不需要的项目占用的内存的过程称为垃圾收集。 在堆内存中创建类对象时,会自动为其分配一定数量的内存。 现在您已经完成了该项目的工作,它以前占用的内存空间被浪费了。 必须释放内存。
8. C#中的结构到底是什么意思?
在 C# 中,结构是由多种数据类型组成的数据类型,例如方法、字段、构造函数、常量、属性、索引器、运算符,甚至其他结构。 结构有助于将多种数据类型合并到一个单元中。 以这种方式,它们类似于课程。 结构是值类型,而类是引用类型。
9. C# 代码是如何编译的?
创建项目时,会将 C# 源代码编译为中间语言 (IL)。 IL 是一组指令,可生成用于在机器处理器上执行的机器代码。 代码从预处理器发送到编译器,然后到汇编器,最后分四个阶段发送到链接器。
10. 清楚地描述不同的 C# 类。
- 静态:是一种不能实例化的类,所以不能用new关键字来做对象,但是可以直接用类名调用类的成员。
- 摘要:要定义抽象类,请使用 abstract 关键字。 不能为抽象类创建对象。 如果要使用它,它必须在子类中继承。 抽象类中允许简单定义抽象和非抽象方法。
- 部分:这个类使您能够将您的属性、方法和事件分离到几个源文件中,这些源文件随后在构建时组合成一个类。
- 密封:密封类不能从另一个类继承,并且具有有限的特性。 不能将访问修饰符添加到密封类。
11. 什么是锯齿数组?
具有数组元素的数组称为交错数组。 锯齿状阵列的元素可以有多种形状和大小。
12、out和ref参数有什么区别?
当将参数作为 ref 提供时,参数必须在传递给方法之前进行初始化。 另一方面,输出参数不需要在提供给方法之前进行初始化。
13.在C#中,什么是析构函数?
析构函数是 C# 中的一种方法,它是类的一部分。 析构函数的主要功能是在不再需要类的实例时删除它们以释放内存。 析构函数有时被称为终结器。
14.在C#中,什么是索引器?
索引器在 C# 中用于查找类或结构的实例。 因此,可以像访问数组一样访问索引值,但不必显式声明类型或实例成员。
15. 托管代码和非托管代码有什么区别?
托管代码允许您在托管 CLR 运行时环境中运行 .NET 框架中的代码。
受控代码在托管运行时环境而不是操作系统上执行。 提供垃圾收集器、异常处理等多种服务。
非托管代码是不在 CLR 上执行并在 .NET 框架之外运行的代码。 它们不提供高级语言服务,因此没有它们就可以运行。 C++ 就是这样一个例子。
16. 描述序列化。
必须从该项目创建字节流,以便通过网络传输它。 序列化是将项目转换为字节流的行为。 必须实现序列化接口才能使项目可序列化。 从字节流构造对象的反序列化称为反序列化。
17. 在 C# 中,字段和属性之间有何不同?
字段是类成员或任何类型的对象,用作存储数据的位置,而属性是提供读取、写入和计算私有字段值的方法的类成员。
18. 如何详细描述 C# 中的 using 语句?
using 语句用于限制应用程序内一个或多个资源的使用。 资源被不断地消耗和释放。
该语句的主要工作是管理不需要的资源并自动释放它们。 使用资源的对象形成后,确保调用对象的 dispose 函数以释放该对象所需的资源; 这是 using 语句派上用场的地方。
19. 如何在同一个类中实现多个具有相同方法名的接口?
要实现多个具有相同方法名称的接口,请避免在函数体中实现它们。 相反,您将直接在方法主体中提供接口的名称。 编译器将识别出哪些接口方法被引用,从而解决问题。
20.在C#中,Task和Thread有什么区别?
线程是真正的操作系统线程,具有自己的堆栈和内核资源。 线程提供了最多的控制。 该线程允许您进行 Abort()、Suspend() 或 Resume()。 可以观察线程的状态或设置其属性,例如堆栈大小、单元状态和文化。 CLR 保留一个由 ThreadPool 包装的线程池。
Task Parallel Library 有一个名为 Task 的类。 与 ThreadPool 不同,Task 没有自己的操作系统线程。 任务由 TaskScheduler 执行,尽管默认调度程序由 ThreadPool 执行。 可以在任务完成时收到通知并获得结果。
21. C#中的finalize函数是什么?
用于清理动作的对象类定义了 finalize() 函数。 当一个对象的引用在很长一段时间内没有被使用时,垃圾收集器通常会调用这个函数。
垃圾收集器会自动释放受控资源,但如果您希望释放不需要的资源,如文件句柄、数据连接等,则必须显式实现 finalize 函数。
22. 区分finalize blocks和finalize。
在 try-and-catch 块完成后调用完成的块,因为它是异常处理所需要的。 无论是否捕获到异常,都会执行代码块。 块的代码通常更干净。
在垃圾回收之前调用 finalize 方法。 finalized 方法的主要职责是清除非托管代码,只要实例没有被调用,就会自动触发。
23.详细描述C#的dispose方法。
disposeof() 函数释放对象的未使用资源。 未使用的资源,例如文件、数据连接等。 该函数在接口IDisposable中指定,由类通过声明接口IDisposable体来实现。
dispose 函数不会自动调用; 程序员必须手动实现它以有效利用资源。
24. 什么是 C# 方法重载? 阐发。
方法重载是 C# 中的一种典型方法,用于构造多个具有相同名称和指定签名的方法。 对同一类重复此过程。
当方法重载过程完成时,编译器开始操作以根据方法重载调用指定的动作。
25. 只读和常量有什么区别?
常量变量在编译期间被声明和初始化。 之后,该值将无法更改。 另一方面,一旦在运行时分配了值,就会使用只读。
26. 什么是用户控件和自定义控件?
编译后的代码用于开发自定义控件。 这些可能包含在工具箱中并且易于使用。 通过拖放这些控件,开发人员可以将它们包含在他们的 Web 表单中。
用户控件和 ASP 包含的文件非常相似。 它们也很容易制作。 另一方面,用户控件不能添加到工具箱中。 它们也不能从中拉出。
27. 在 C# 中,什么是多播委托?
多播委托同时维护对多个功能的引用或地址。 当我们调用多播委托时,它还将调用它所引用的所有其他函数。 要调用多个方法,请使用整个方法签名,就像委托一样。 举个例子:
28. C#中的对象池究竟是什么?
对象池是软件中的一种设计技术,它回收而不是重建它们。 它通过将所选项目存储在池中并在应用程序请求它们时使它们可供使用来实现这一点。 此过程通过减少不必要的对象生成来提高性能。
29. C#.NET 中的泛型到底是什么?
泛型用于创建可重用的代码类,以减少代码冗余、提高类型安全性并提高速度。 我们可以用泛型构造集合类。
在系统中,应该使用通用命名空间而不是像 ArrayList 这样的类。 集合的命名空间。 泛型鼓励使用参数化类型。
30. 重写私有虚方法可行吗?
私有虚拟方法不能被覆盖,因为它是类私有的,不能从它的外部访问。
31. C#中方法重载和方法覆盖的区别?
方法覆盖是更改派生类的基本定义的过程。 由于这种策略,派生类的方法最终表现不同。
另一方面,方法重载可以描述为在同一类下生成许多具有相同名称但签名不同的方法的行为。
32.在C#中,String和StringBuilder有什么区别?
字符串对象是不可变的,这意味着它一旦创建就不能更改。 任何更改字符串对象的尝试都将导致创建新的字符串对象。
另一方面,字符串构建器对象具有延展性,并且可以在开发人员认为合适的情况下进行更改。
33. 代表到底是什么?
在 C++ 中,委托与函数指针基本相同。 两者之间的唯一区别是委托是类型安全的,而函数指针则不是。 委托是必要的,因为它们能够构造泛型类型安全函数。
34. 什么时候应该在 C# 中使用多线程,什么时候应该避免它?
多线程,通常称为线程,是一种提高程序速度的有效方法,其中许多活动同时执行。 它使各个线程能够独立执行,而不是等待前面的步骤完成。 这有能力提高程序的速度。
但是,当程序的多个进程相互连接时,不建议使用多线程。 例如,如果步骤 B 依赖于首先完成的步骤 A,那么多线程会导致性能问题和软件缺陷。 随着程序的复杂性发展,线程变得越来越敏感。
35. 在 C# 中,什么是多播委托?
与基本委托相反,C# 中的多播委托指代许多目标方法。 当使用多播委托时,将调用委托所指向的所有函数。 它们是在系统的 MulticastDelegate 类的帮助下实现的。
36.在C#中,后期绑定和早期绑定有什么区别?
- 早期绑定发生在编译时,而后期绑定发生在运行时。
- 后期绑定通常比早期绑定慢,因为它发生在运行时。
- 与使用对象解析方法调用的后期绑定不同,早期绑定使用类信息解析方法调用。
37. Directcast和Ctype的区别?
需要运行时类型与 DirectCast 中指定类型匹配的对象类型使用 DirectCast 进行转换。
当在表达式和类型之间指定转换时,使用 Ctype。
38. C#中如何使用HashSet?
在 C# 中,HashSet 是不同值的无序集合。 通常,它用于防止将重复元素插入到集合中,并且在此任务中它比列表执行得更好。
HashSet 类,它是 System 的后代,用于实现它。
39. 请解释 C# 中的线程池。
在 C# 中,线程池是线程的集合。 这些线程用于在不干扰主线程功能的情况下执行任务。 线程池中的线程在完成运行后返回线程池。
System 类包含处理线程池中的线程及其操作的类。 穿线。 ThreadPool 是一个命名空间。
40. C#中的Const和ReadOnly关键字有什么区别?
- ReadOnly 不能在方法中声明,而 Const 可以。
- Const 是编译时常量,而 ReadOnly 是运行时常量。
- ReadOnly 值可以更改,但 Const 值不能。
41. 您能提供有关 C# XSD 文件的哪些详细信息?
XSD 代表 XML 模式定义。 如果没有 XSD 文件与 XML 文件连接,则它可以具有任何属性、元素和标记。 XSD 文件为 XML 文件提供了一个框架,确定了 XML 文件中应该出现的组件和属性以及它们的顺序。
42. Get 和 Set Accessor 属性对您意味着什么?
在 C# 中,Get 和 Set 被称为访问器,因为它们是使用属性创建的。 属性允许读取和写入私有字段的值。 通过访问器访问此类私有字段。
Get 属性用于返回属性的值,而 Set 属性用于设置值。
43. C#中的依赖注入到底是什么?
依赖注入 (DI) 是 C# 中的一种设计技术,用于创建松散链接的编程。 此过程将依赖对象的创建和绑定转移到它们所依赖的类之外。 主要目标是使未来的代码修改更易于管理。
结论
C# 是所有高级编程语言中使用的主要编程语言。 C# 开发人员需求量很大,可以在前端开发、后端编程和应用程序开发等行业找到有吸引力的职业前景。 而且因为微软支持它,C# 的流行度只会增长。
对于有经验的专业人士和初学者来说,上述是最关键的 C# 面试问题。 看 Hashdork的采访系列 为面试准备提供帮助。
发表评论