三、C#面向对象编程(类与对象)
C# 是一种面向对象的编程语言,这意味着在 C# 中,我们主要与对象打交道,而对象是由类定义的。面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件和应用程序。以下是关于 C# 中类与对象的基本概念:
- 类(Class):类是对象的模板或蓝图。它定义了对象的属性(字段)和方法。类定义了对象的数据和行为。例如:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public void Greet()
{
Console.WriteLine("Hello, my name is " + Name);
}
}
在这个例子中,Person
是一个类,它定义了一个人的姓名和年龄属性,以及一个问候方法。
2. 对象(Object):对象是类的实例。它是类的一个具体实体。当我们创建一个类的实例时,我们得到一个对象。例如:
Person person1 = new Person(); // 创建一个 Person 类的实例
person1.Name = "Alice"; // 设置对象的属性
person1.Age = 25; // 设置对象的属性
person1.Greet(); // 调用对象的方法
在这个例子中,person1
是 Person
类的一个实例,也就是一个对象。我们通过这个对象来设置它的属性(如姓名和年龄)并调用它的方法(如问候)。
3. 封装(Encapsulation):封装是面向对象编程的三大基本特性之一。它指的是隐藏对象的内部状态并防止直接访问。我们通过访问器(getter)和设置器(setter)来控制对类中字段的访问。在上面的 Person
类中,Name
和 Age
字段就是封装的例子。
4. 继承(Inheritance):继承是面向对象编程的另一个重要特性,它允许一个类继承另一个类的属性和方法。这使得我们可以创建一个更加具体的类(子类),它继承了更一般的类(父类)的属性和方法。例如,我们可以创建一个 Student
类,它继承自 Person
类:
public class Student : Person // Student 类继承自 Person 类
{
public int StudentId { get; set; }
public void Register()
{
Console.WriteLine("Student registered successfully.");
}
}
在这个例子中,Student
类继承了 Person
类的所有属性和方法,并添加了自己的 StudentId
属性和 Register
方法。
5. 多态(Polymorphism):多态是指一个接口可以有多种实现方式。这使得我们可以将不同类型的对象视为同一类型,并调用相应的方法。多态的实现通常依赖于继承和接口。
6. 抽象类(Abstract Class)和接口(Interface):抽象类是一个不能被实例化的类,它定义了一些基本的属性和方法供子类继承和实现。接口是一组方法的集合,它定义了类必须实现的方法,但不包含方法的实现。一个类可以实现多个接口。
7. 构造函数(Constructor):构造函数是一种特殊的方法,它在创建对象时自动调用。构造函数用于初始化对象的属性。在 C# 中,构造函数可以有参数,也可以没有参数(默认构造函数)。在上面的 Person
类中,我们没有显式定义构造函数,所以编译器会自动为我们提供一个默认的无参数构造函数。如果我们想定义自己的构造函数,可以这样做:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name, int age) // 带参数的构造函数
{
Name = name;
Age = age;
}
}
在这个例子中,我们定义了一个带参数的构造函数,这样在创建 Person
类的实例时就需要提供姓名和年龄参数。
除了上面提到的特性,C# 还有一些其他与类和对象相关的概念,例如:
- 析构函数(Destructor):析构函数是一个特殊的方法,它在对象被销毁时自动调用。它通常用于释放资源。在 C# 中,析构函数使用
~
符号来定义。 - 静态类(Static Class):静态类是一个不能被实例化的类,它只能包含静态成员。静态成员是属于类的,而不是属于类的实例。
- 单例模式(Singleton Pattern):单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。
- 工厂模式(Factory Pattern):工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。工厂模式通过将对象的创建与使用分离,使得代码更加模块化。
- 依赖注入(Dependency Injection):依赖注入是一种设计模式,它允许将一个类的依赖关系(如其他类或服务)注入到该类中,而不是在类内部创建它们。这有助于减少代码之间的耦合,并使测试更加容易。
这些是 C# 中与类和对象相关的基本概念和特性。通过理解这些概念和特性,您可以更好地利用面向对象编程的优势,编写出更加清晰、可维护和可扩展的代码。