Skip to content
On this page

类和对象的概念

  • 类(Class)是一个用来描述具有相似特征的对象的蓝图或模板。它定义了对象的属性(成员变量)和行为(成员函数),还可以包含构造函数和析构函数等。
  • 对象(Object)是类的实例化,即创建了一个类的具体实例,具有该类所描述的属性和行为。
  • 在 C# 中,类和对象是面向对象编程中的重要概念。
    • 类定义了对象的属性和行为,而对象是类的实例化。
    • 使用类可以通过实例化类来创建对象,并使用对象调用类的成员变量和成员函数。
    • 类可以继承自其他类,从而实现类的重用和代码的组织。

一个类由以下部分组成:

  • 类的名称:类名应该反映出它所描述的对象的特征和行为。
  • 成员变量(属性):类的属性定义了它所描述的对象的特征。它们是类的数据成员,存储对象的状态。属性可以是值类型(如整数、浮点数等)或引用类型(如字符串、数组等)。
  • 成员函数(方法):类的方法定义了它所描述的对象的行为。方法可以是实例方法或静态方法,实例方法作用于特定对象,静态方法是类的方法,它不依赖于特定对象。
  • 构造函数:构造函数是一个特殊的方法,用于初始化类的新实例。它的名称与类的名称相同,没有返回类型,并且可以有多个不同的重载形式。
  • 析构函数:析构函数是一个特殊的方法,用于在对象被销毁之前执行清理工作。
csharp
public class Person
{
    // 成员变量
    public string name;
    public int age;

    // 构造函数
    public Person(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    // 成员方法
    public void SayHello()
    {
        Console.WriteLine($"Hello, my name is {this.name}, and I am {this.age} years old.");
    }
}

对象

对象是类的实例化。实例化是使用 new 运算符创建一个对象,并将其分配给一个变量。在创建对象时,必须调用该类的构造函数。构造函数用于初始化对象的成员变量。

以下是一个创建 Person 类对象的示例:

csharp
Person person = new Person("Tom", 30);

上面的代码创建了一个名为 person 的 Person 对象,其名称为“Tom”,年龄为 30 岁。

一旦创建了一个对象,就可以通过使用点运算符访问它的属性和方法。

csharp
person.SayHello();
Console.WriteLine($"My name is {person.name}, and I am {person.age} years old.");

上面的代码调用了 person 对象的 SayHello() 方法,并使用 Console.WriteLine() 方法打印出了 person 对象的名称和年龄。

继承

继承是一种机制,它允许子类(派生类)从父类(基类)继承属性和行为,并在此基础上添加或修改其自己的特性。派生类可以访问基类的公共和受保护的成员变量和成员函数,并可以使用它们来定义自己的成员变量和成员函数。

以下是一个继承自 Person 类的 Employee 类的示例:

csharp
public class Employee : Person
{
    public int employeeId;
    public float salary;

    public Employee(string name, int age, int employeeId, float salary) : base(name, age)
    {
        this.employeeId = employeeId;
        this.salary = salary;
    }

    public void ShowEmployeeDetails()
    {
        Console.WriteLine($"Name: {name}, Age: {age}, Employee Id: {employeeId}, Salary: {salary}");
    }
}

在上面的代码中,Employee 类继承自 Person 类,并添加了 employeeId 和 salary 两个成员变量,以及 ShowEmployeeDetails() 来显示雇员的详细信息。构造函数调用了父类的构造函数来初始化从父类继承的成员变量。

使用 Employee 类的示例:

csharp
Employee employee = new Employee("Alice", 25, 1234, 50000);
employee.SayHello();
employee.ShowEmployeeDetails();

上面的代码创建了一个名为 employee 的 Employee 对象,并设置了名称、年龄、雇员 ID 和薪水。然后,它调用了从 Person 类继承的 SayHello() 方法和 Employee 类的 ShowEmployeeDetails() 方法。

输出结果如下:

bash
Hello, my name is Alice, and I am 25 years old.
Name: Alice, Age: 25, Employee Id: 1234, Salary: 50000

总结

在 C# 中,继承是实现代码重用和组织的重要机制。通过继承,子类可以从父类继承属性和行为,并添加或修改其自己的特性。C#中的继承是单继承的,即每个类只能直接继承自一个基类。

实际应用

在学校里,学生是一个类,而每个具体的学生就是对象。

  • 学生是一个模板,描述了一个学生应该具有的属性和行为。
  • 而每个具体的学生,如小明、小红等,就是类的实例,也就是对象。

假设我们要创建一个学生类(Student class),这个类将拥有以下属性和行为:

  • 属性:
    • 姓名(name)
    • 年龄(age)
    • 学号(id)
    • 性别(gender)
  • 行为:
    • 学习(study)
    • 休息(rest)

假设我们要创建一个名为小明(Ming)的学生对象,可以通过以下方式实现:

csharp
// 创建一个名为 Student 的类
public class Student
{
    public string name;
    public int age;
    public string id;
    public string gender;

    // 学生类的构造函数
    public Student(string name, int age, string id, string gender)
    {
        this.name = name;
        this.age = age;
        this.id = id;
        this.gender = gender;
    }

    // 学习方法
    public void Study()
    {
        Console.WriteLine($"{name} is studying now.");
    }

    // 休息方法
    public void Rest()
    {
        Console.WriteLine($"{name} is taking a rest now.");
    }
}

// 创建一个名为小明的 Student 对象
Student ming = new Student("Ming", 18, "20181001", "male");

在上面的代码中:

  • 我们首先创建了一个名为 Student 的类,该类拥有:
    • 四个属性:姓名 name、年龄 age、学号 id 和性别 gender
    • 两个行为:学习方法 Study() 和休息方法 Rest()。
  • 然后我们创建了一个名为 ming 的 Student 对象,该对象的
    • 属性值分别为 姓名(Ming)、年龄(18)、学号(20181001)和性别(male)

用类的方法和属性来模拟小明的行为,比如:

csharp
ming.Study();
ming.Rest();
Console.WriteLine($"Name: {ming.name}, Age: {ming.age}, Id: {ming.id}, Gender: {ming.gender}");

// Ming is studying now.
// Ming is taking a rest now.
// Name: Ming, Age: 18, Id: 20181001, Gender: male

通过调用 ming 对象的 Study() 和 Rest() 方法,我们模拟了小明正在学习和休息的行为。另外,我们还可以通过 ming 对象的属性来获取小明的信息。

这个例子中,学生类就是一个抽象的概念,而小明、小红等具体的学生则是类的实例,也就是对象。类定义了对象的属性和行为,而对象则具体实现了这些属性和行为。