C# 的类和对象

2024-10-08 20:54:14 浏览数 (2)

在面向对象编程(OOP)中,类和对象是构建程序的基本构件。C#,作为一门面向对象的编程语言,提供了丰富的特性来支持类和对象的创建和使用。本文将深入探讨C#中的类和对象,包括它们的定义、特性、以及如何使用它们来构建复杂的应用程序。

1. 类和对象的基本概念

1.1 类的定义

类是对象的蓝图或模板,它定义了对象的状态(属性)和行为(方法)。在C#中,类是通过关键字class定义的。

代码语言:javascript复制
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }

    public void DisplayInfo()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}

1.2 对象的创建

对象是类的实例。在C#中,对象是通过使用new关键字和类构造函数来创建的。

代码语言:javascript复制
Person person1 = new Person("Alice", 30);
person1.DisplayInfo();

2. 类的组成

2.1 属性

属性是类的一部分,用于存储数据。它们通常包含getset访问器。

代码语言:javascript复制
public class Person
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private int _age;
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }
}

2.2 方法

方法定义了类的行为。它们可以包含参数,并返回值。

代码语言:javascript复制
public class Person
{
    public void DisplayInfo()
    {
        Console.WriteLine($"Name: {Name}, Age: {Age}");
    }
}

2.3 构造函数

构造函数用于初始化新创建的对象。

代码语言:javascript复制
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

2.4 析构函数

析构函数用于在对象被销毁前执行清理工作。

代码语言:javascript复制
public class Person : IDisposable
{
    public void Dispose()
    {
        // Clean up resources
    }
}

3. 继承

继承是面向对象编程的核心概念之一,它允许一个类(子类)继承另一个类(基类)的属性和方法。

代码语言:javascript复制
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Employee : Person
{
    public string Department { get; set; }
}

4. 多态

多态允许使用基类引用来引用子类对象,并在运行时确定对象的实际类型。

代码语言:javascript复制
public class Person
{
    public virtual void DisplayInfo()
    {
        Console.WriteLine("Person info");
    }
}

public class Employee : Person
{
    public override void DisplayInfo()
    {
        Console.WriteLine("Employee info");
    }
}

Person person = new Person();
Employee employee = new Employee();

person.DisplayInfo();  // Outputs: Person info
employee.DisplayInfo(); // Outputs: Employee info

5. 封装

封装是将数据(属性)和操作数据的方法(行为)捆绑在一起的过程。它隐藏了对象的实现细节。

代码语言:javascript复制
public class Person
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }

    private int _age;
    public int Age
    {
        get { return _age; }
        set { _age = value; }
    }
}

6. 抽象类

抽象类是不能被实例化的类,它通常包含一个或多个抽象方法,这些方法必须在子类中实现。

代码语言:javascript复制
public abstract class Animal
{
    public abstract void MakeSound();
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Bark");
    }
}

7. 接口

接口定义了一组方法,但不实现它们。类可以实现一个或多个接口。

代码语言:javascript复制
public interface IPlayable
{
    void Play();
}

public class MusicPlayer : IPlayable
{
    public void Play()
    {
        Console.WriteLine("Playing music");
    }
}

8. 泛型

泛型允许在编译时创建类型安全的集合和其他数据结构。

代码语言:javascript复制
public class List<T>
{
    private T[] _items;

    public void Add(T item)
    {
        // Add item to the list
    }

    public T Get(int index)
    {
        return _items[index];
    }
}

9. 集合

C#提供了多种集合类型,如数组、列表、字典等,用于存储和管理数据。

代码语言:javascript复制
List<int> numbers = new List<int>();
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);

foreach (int number in numbers)
{
    Console.WriteLine(number);
}

0 人点赞