在面向对象编程 (OOP) 中,这是最核心的概念。
* 对象 (Object):是根据图纸制造出来的实物。它是类的实例 (Instance),在内存中占据实际空间。
比喻:
* 类:汽车的设计图纸(规定了有4个轮子、有引擎、能跑)。
使用 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("正在学习..."); } }
字段是类内部使用的变量,通常用于存储数据。
* 规范:一般设为 private(私有),变量名前加下划线 _。
* 作用:作为类的内部状态,不直接对外暴露。
属性是对字段的封装,用于保护数据。
* get:读取数据。
* set:写入数据(可以在这里加逻辑判断,比如年龄不能为负数)。
* 简写:public int Age { get; set; } (自动属性)。
方法是类能够执行的动作或行为(函数)。
* 特点:方法名与类名相同,没有返回值(连 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; } }
定义好类之后,需要使用 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 } }
在类的方法或构造函数中,this 代表当前这个对象实例本身。
主要用途:
当方法的参数名(局部变量)与类的属性名(成员变量)重名时,使用 this 来区分。
class Person { public string name; // 成员变量 public void SetName(string name) // 参数 name { // name = name; // 错误:这是把参数赋给参数自己,没意义 this.name = name; // 正确:把参数 name (右边) 赋值给当前对象的成员变量 name (左边) } }
控制类成员的可见性(封装性)。
| 修饰符 | 含义 | 作用范围 |
|---|---|---|
public | 公有的 | 最大权限,任何地方都能访问 |
private | 私有的 | 最小权限,只有在当前类的大括号 {} 内部能访问 |
protected | 受保护的 | 只有当前类和继承它的子类能访问 |
internal | 内部的 | 同一个项目(程序集)内可以访问 |
new 创建。