C#基础入门:简明笔记涵盖值类型、引用类型与泛型

需积分: 0 2 下载量 168 浏览量 更新于2024-10-30 收藏 63KB DOC 举报
C#的课堂笔记主要介绍了C#语言的一些基础知识和特性,尽管笔记内容相对简陋且不详尽,但以下几个关键知识点值得深入理解和掌握: 1. **值类型与引用类型**: C#中有两种数据类型:值类型(如int、float等)和引用类型(如对象、类)。值类型在内存中直接分配空间,对它们的操作不会改变原始变量的值;而引用类型存储的是对象的地址,修改引用类型的值实际上是修改了该对象的状态。示例代码展示了如何将整型值类型赋值给object类型的引用,以及随后的装箱和拆箱操作。 2. **装箱和拆箱**: 当将值类型赋值给引用类型时,编译器会自动将其“装箱”成对象,如`object obj1 = x;`这一行,将int类型的x转换为Object类型。相反,从引用类型恢复到值类型时,称为“拆箱”,如`y = (int)obj1;`,将对象强制转换回int。这种方式虽然简洁,但可能会导致性能开销,特别是在频繁进行类型转换时。 3. **泛型(Generics)**: 泛型是C#中的一个重要特性,它允许开发者编写一次代码,处理多种数据类型。通过在类名后使用尖括号`<>`定义类型参数,如`public class Pair<TFirst, TSecond> {...}`,程序可以创建可适应不同类型的实例。在使用泛型时,必须为类型参数提供具体的类型实参,如`Pair<int, string> pair = new Pair<int, string> {...}`。C#的泛型仅支持显式约束,确保类型安全,这包括基类约束、接口约束、构造器约束和值/引用类型约束。 - **显式约束**:C#中的泛型约束用`where`子句表示,如`class C<S, T> where S : A, T : B`,规定S必须继承自A,T必须继承自B。这种约束使得代码更具通用性和灵活性。 4. **不穿透(Non-Instantiability)**: 泛型类型有时可能具有不穿透(non-instantiability)的特性,即无法直接创建该类型的实例。例如,如果某个泛型类型在where子句中没有明确指定任何类型的实现,那么它就无法创建。这是为了确保类型安全,防止意外地创建潜在无效的对象。 C#的学习者需要理解这些核心概念,包括不同类型的操作方式,以及如何通过泛型实现代码的复用和类型安全。随着对这些基础概念的深入理解,开发者可以更有效地编写出健壮且高效的C#代码。