====== C# 类 (Class) 基础知识 ======
===== 1. 概念:什么是类与对象? =====
在面向对象编程 (OOP) 中,这是最核心的概念。
* **类 (Class)**:是**图纸**、**模板**或**模具**。它定义了事物应该具备的属性(数据)和行为(功能),但在内存中不占实际空间(除了静态成员)。
* **对象 (Object)**:是根据图纸制造出来的**实物**。它是类的**实例 (Instance)**,在内存中占据实际空间。
> **比喻**:
* **类**:汽车的设计图纸(规定了有4个轮子、有引擎、能跑)。
* **对象**:根据图纸造出来的具体的一辆奔驰、一辆宝马。
===== 2. 类的基本语法结构 =====
使用 ''class'' 关键字来定义类。
// 定义一个类:Student
public class Student
{
// 1. 字段 (Fields):存储数据
private int _age;
// 2. 属性 (Properties):保护字段,控制读写
public string Name { get; set; }
// 3. 构造函数 (Constructor):初始化对象
public Student()
{
// ...
}
// 4. 方法 (Methods):定义的行为
public void Study()
{
Console.WriteLine("正在学习...");
}
}
===== 3. 类的核心成员详解 =====
==== 3.1 字段 (Fields) ====
字段是类内部使用的变量,通常用于存储数据。
* **规范**:一般设为 ''private''(私有),变量名前加下划线 ''_''。
* **作用**:作为类的内部状态,不直接对外暴露。
==== 3.2 属性 (Properties) ====
属性是对字段的封装,用于保护数据。
* **get**:读取数据。
* **set**:写入数据(可以在这里加逻辑判断,比如年龄不能为负数)。
* **简写**:''public int Age { get; set; }'' (自动属性)。
==== 3.3 方法 (Methods) ====
方法是类能够执行的动作或行为(函数)。
==== 3.4 构造函数 (Constructor) ====
* **特点**:方法名与类名相同,**没有返回值**(连 void 都不写)。
* **触发时机**:在使用 ''new'' 关键字创建对象时自动调用。
* **作用**:用于初始化对象(给属性赋初始值)。
class Phone
{
public string Brand { get; set; }
public double Price { get; set; }
// 无参构造函数
public Phone()
{
Brand = "未知品牌";
Price = 0;
}
// 重载构造函数(带参数)
public Phone(string brand, double price)
{
// this 关键字代表当前对象
this.Brand = brand;
this.Price = price;
}
}
===== 4. 类的实例化 (Instantiation) =====
定义好类之后,需要使用 ''new'' 关键字把它变成对象才能使用。
class Program
{
static void Main(string[] args)
{
// 1. 使用无参构造函数创建对象
// 内存中开辟了一块空间,生成了一个 Phone 对象,名字叫 myPhone
Phone myPhone = new Phone();
myPhone.Brand = "Apple"; // 修改属性
// 2. 使用带参构造函数创建对象
// 在创建的同时直接赋值
Phone myXiaoMi = new Phone("Xiaomi", 3999.00);
Console.WriteLine(myXiaoMi.Brand); // 输出: Xiaomi
}
}
===== 5. this 关键字 =====
在类的方法或构造函数中,''this'' 代表**当前这个对象实例本身**。
**主要用途**:
当方法的参数名(局部变量)与类的属性名(成员变量)重名时,使用 ''this'' 来区分。
class Person
{
public string name; // 成员变量
public void SetName(string name) // 参数 name
{
// name = name; // 错误:这是把参数赋给参数自己,没意义
this.name = name;
// 正确:把参数 name (右边) 赋值给当前对象的成员变量 name (左边)
}
}
===== 6. 访问修饰符 (Access Modifiers) =====
控制类成员的可见性(封装性)。
^ 修饰符 ^ 含义 ^ 作用范围 ^
| ''public'' | 公有的 | **最大权限**,任何地方都能访问 |
| ''private'' | 私有的 | **最小权限**,只有在当前类的大括号 {} 内部能访问 |
| ''protected''| 受保护的 | 只有当前类和**继承**它的子类能访问 |
| ''internal'' | 内部的 | 同一个项目(程序集)内可以访问 |
===== 7. 总结 =====
* **类 (Class)** 是定义结构的蓝图。
* **对象 (Object)** 是内存中运行的实体,通过 ''new'' 创建。
* **字段**存数据,**属性**管数据,**方法**做事情。
* **构造函数**负责对象出生时的初始化。
* **this** 区分“我的成员”和“外来的参数”。