C#面试基础题(几个基本的面试题 但很多人不是很清楚)
### C#基础知识详解 #### 一、CLR与CTS解析 **CLR**(Common Language Runtime)是.NET框架的核心组件之一,可以将其理解为一种运行时环境。CLR提供了内存管理、垃圾回收、类型安全以及语言互操作性等核心服务,并且执行托管代码。在.NET程序运行时,CLR负责将编译后的中间语言(IL)代码转换成机器码,并在运行时环境中执行这些代码。 - **内存管理**:CLR提供了一套自动内存管理系统,包括自动垃圾回收机制,这使得开发人员无需手动管理内存分配与释放,从而减少了内存泄漏等问题的发生。 - **类型安全**:CLR通过严格的类型检查确保了程序的安全性和稳定性,避免了由于类型不匹配导致的运行时错误。 - **语言互操作性**:CLR支持多种编程语言编写的应用程序之间的互操作,这意味着不同语言编写的代码可以在同一个应用程序中协同工作。 **CTS**(Common Type System)是.NET框架中的一个重要组成部分,它定义了一组规则,确保所有.NET语言都可以使用相同的基本数据类型和面向对象的功能。CTS的存在保证了不同.NET语言编写的代码之间能够无缝地进行交互。 - **数据类型的一致性**:CTS确保了所有.NET语言都使用相同的数据类型,例如int、string等。 - **面向对象的支持**:CTS定义了一系列面向对象的概念,如类、接口、继承等,确保不同语言编写的对象可以相互操作。 #### 二、属性与特性 **属性**(Property)是C#中用于封装数据成员的一种机制。属性可以看作是一种特殊的成员,它允许以类似于字段的方式访问和修改对象的状态,但实际上它是通过方法实现的。例如: ```csharp public class Time { private int hour; public int Hour { get { return hour; } set { hour = value; } } } ``` 在这个例子中,`Hour`是一个属性,它有两个访问器:`get`和`set`。`get`访问器用于获取属性值,而`set`访问器用于设置属性值。 **特性**(Attribute)是.NET Framework的一个关键特性,它允许开发者向代码中添加元数据。特性通常用于注解代码,比如指定方法或类的行为方式。例如: ```csharp [DLLImport("User32.dll")] public static extern int MessageBox(IntPtr hWnd, string text, string caption, uint type); ``` 这里的`[DllImport("User32.dll")]`就是一个特性,用于标记一个方法调用的是外部的DLL库。 #### 三、GAC(Global Assembly Cache) **GAC**(Global Assembly Cache)是一个全局的缓存,用于存储被多个应用程序共享的.NET程序集(Assemblies)。当一个应用程序引用了一个存在于GAC中的程序集时,它可以从GAC中直接加载该程序集,而无需复制到应用程序的本地目录下。GAC通常包含了.NET Framework的一些核心程序集,如System.Data、System.Windows.Forms等。 - **共享性**:GAC中的程序集可以被多个应用程序共享,提高了资源的利用率。 - **版本控制**:GAC支持程序集的版本控制,当更新程序集时,不会影响正在运行的应用程序。 #### 四、值类型与引用类型的区别 在C#中,根据数据存储方式的不同,类型可以分为值类型(Value Types)和引用类型(Reference Types)两大类。 1. **值类型**: - 包括简单类型(如int、float)、枚举类型(Enum)以及结构体(Struct)等。 - 值类型直接存储实际的数据值。 - 当赋值时,会创建一个包含相同数据的新副本。 - 存储在栈中。 2. **引用类型**: - 包括类(Class)、数组、接口(Interface)等。 - 引用类型存储的是指向实际数据的引用。 - 当赋值时,实际上是传递引用而非复制数据本身。 - 存储在堆上。 #### 五、常量与静态只读字段 - **const**关键字用来声明常量,其值在编译时就已经确定,不可改变。 - **static readonly**则用来声明静态只读字段,这类字段必须在类型初始化之前就得到初始化,并且一旦初始化后其值就不能更改。 两者的主要区别在于: - **存储位置**:`const`声明的常量是在编译期间就确定的,因此它们实际上并不占用内存空间;而`static readonly`声明的字段会在内存中分配空间来存储其值。 - **初始化**:`const`声明的常量必须在声明时就初始化;而`static readonly`声明的字段可以在声明时初始化,也可以在类型构造函数中初始化。 - **可变性**:`const`声明的常量值是固定的,无法更改;而`static readonly`声明的字段虽然也不能在初始化后更改,但如果其类型支持可变性(如数组),则仍然可以通过修改数组元素来间接改变字段的值。 以上内容总结了C#面试中常见的几个基础知识点,对于初学者来说非常重要。了解这些基础知识有助于更好地理解和掌握C#语言的核心概念和技术要点。
CLR是公共语言运行时(Common Language Runtime),是一种多语言执行环境,支持众多数据类型和语言特性。它管理代码的运行,建立一种可靠的执行环境,其功能通过编译器和其他工具共同展现。编译器产生元数据,元数据中包含了类型、成员、引用的信息。运行时通过这些元数据定位并载入类,在内存中展开对象实例,解决方法调用,产生本地代码,强制执行安全性,并建立运行时环境的边界。
CTS是公共类型系统(Common Type System)。这个类型系统提供了多语言无缝集成的条件。.net中的所有编程语言类型都必须建立他的数据类型与CTS的类型间的映射。所有.net语言共享这一类型系统。
2、Property和Attribute的区别
这两个名词都被解释为“属性”,不过却没有一点联系。Property是指字段,即类的成员,例如:
//这个就是一个Property
public int Hour
{
get { return hour; }
set { hour = value;}
}
而Attribute则是.net framework文件的元数据,用来表述运行时的代码。一般用“[]”括起来放在类头,方法头,或者属性头来表达一定的含义。例如我们引入一个外部的DLL时候,这些写:
[DllImport("User32.dll")]
3、什么是强类型和弱类型?c#是什么类型?javascript呢?
强/弱类型是指类型检查的严格程度。语言有无类型、弱类型和强类型三种。无类型的不检查,甚至不区分指令和数据。弱类型的检查很弱,仅能严格的区分指令和数据。强类型则严格的在编译期间检查。
使用哪种语言按需而定。编写简单而小的应用程序,使用弱类型可以节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型可能会比弱类型更加规范和可靠。
由上面的解释可以看出c#是强类型语言,而javascript是弱类型语言,因为javascript中用var定义所有变量。
4、什么是GAC?
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ORACLE数据库管理系统体系结构中文WORD版最新版本
- Sybase数据库安装以及新建数据库中文WORD版最新版本
- tomcat6.0配置oracle数据库连接池中文WORD版最新版本
- hibernate连接oracle数据库中文WORD版最新版本
- MyEclipse连接MySQL的方法中文WORD版最新版本
- MyEclipse中配置Hibernate连接Oracle中文WORD版最新版本
- MyEclipseTomcatMySQL的环境搭建中文WORD版3.37MB最新版本
- hggm - 国密算法 SM2 SM3 SM4 SM9 ZUC Python实现完整代码-算法实现资源
- SQLITE操作入门中文WORD版最新版本
- Sqlite操作实例中文WORD版最新版本