.NET面试必备:值类型与引用类型深度解析

需积分: 3 7 下载量 171 浏览量 更新于2024-12-14 收藏 2.61MB PDF 举报
".NET面试知识点详解" .NET面试中,掌握基础的.NET机理是至关重要的,这包括了对值类型和引用类型的理解、内存管理、数据类型以及对象的生命周期等核心概念。以下是对这些知识点的详细解释: 1. 值类型与引用类型: - **值类型**:在C#中,值类型包括基本类型(如int、char)、结构(struct,继承自System.ValueType)和枚举(enum)。它们在内存中直接存储值,分配在栈上,复制时会创建一个新的副本,改变副本不会影响原始值。例如,当传递或返回值类型变量时,实际上是拷贝了一份数据。 - **引用类型**:包括类(class,继承自System.Object)、接口(interface)、委托(delegate)以及字符串(string,虽然是不可变的引用类型,但表现得像值类型)。引用类型存储的是对象的引用,而非实际值,分配在堆中。复制引用时,只是复制了指针,对一个引用的修改会影响到所有指向同一对象的其他引用。 2. 内存分配与回收: - **值类型**:在栈上分配,生命周期结束时立即释放。 - **引用类型**:在堆上分配,由垃圾回收器(Garbage Collector, GC)负责回收,只有当没有任何引用指向一个对象时,GC才会回收其内存。 3. 数据类型: - C#提供了多种内置数据类型,包括8种整型、浮点型(float、double和decimal)、布尔型(bool)、字符型(char)、空类型(null)等。其中,decimal用于高精度的财务计算。 - 结构体(struct)是值类型,而类(class)是引用类型。 - 接口(interface)定义了一组方法签名,不包含实现,是一种契约。 - 委托(delegate)是类型安全的函数指针,可以用来封装方法。 4. 对象分配与初始化: - 使用`new`关键字会在堆上创建对象实例,返回的对象引用存储在栈上的变量中。例如,`object reference = new object();`这里的`reference`是一个引用,指向堆上的一个`System.Object`实例。 - 数组分配:对于值类型数组,如`TestType[] testTypes = new TestType[100];`,会一次性在栈上分配100个值类型的存储空间并初始化。而对于引用类型数组,先在堆上分配数组本身的空间,然后每个元素的引用需要单独`new`。 5. 类型扩展与函数参数: - 引用类型易于扩展,可以通过继承和多态实现功能扩展。 - 函数参数传递时,值类型是值的拷贝,而引用类型仅传递引用,对参数的修改会反映到原始对象上。 理解这些.NET基础机理对于面试和实际开发都至关重要,能够帮助开发者有效地编写、优化代码,避免内存泄漏和性能问题。在准备.NET面试时,应深入学习这些概念,并结合实践来提高自己的技能水平。