C# 类(Class)详解
                           
天天向上
发布: 2025-04-13 13:39:48

原创
808 人浏览过

C# 类(class)是面向对象编程中的一个核心概念,它定义了一种数据类型,描述了一组属性、方法和事件等成员。类作为对象的蓝图,用于封装数据和行为。通过类,你可以创建对象,并通过对象访问和操作类中定义的成员。


一、类的基本概念

  • 类是引用类型:类的实例化对象存储在堆内存中,传递的是引用(指针)而不是副本。
  • 封装:类允许将数据和行为封装在一个单元中,提供了对数据的访问控制(如通过访问修饰符来控制对字段和方法的访问)。
  • 构造函数:类可以包含构造函数,用于初始化类的实例。
  • 继承:类可以继承其他类,继承使得一个类可以获取另一个类的成员。
  • 多态:类可以实现方法重载和方法重写,支持多态性。

二、定义类

定义一个类需要使用 class 关键字。类中可以包含字段、属性、方法和构造函数等成员。

class Person
{
    // 字段
    public string Name;
    public int Age;

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

    // 方法
    public void Introduce()
    {
        Console.WriteLine($"Hi, my name is {Name} and I am {Age} years old.");
    }
}

三、创建类的实例

通过 new 关键字来创建类的实例,然后使用该实例访问类的成员。

Person person1 = new Person("John", 30);  // 创建对象并初始化
person1.Introduce();  // 调用方法
Console.WriteLine(person1.Name);  // 访问字段

四、类的成员

类可以包含多种成员,如字段、属性、方法、构造函数等。下面是每个成员的具体说明。

1. 字段(Field)

字段是类中的变量,用于存储对象的数据。

class Car
{
    public string Model;
    public int Year;
}

2. 属性(Property)

属性是对字段的封装,允许通过 getset 方法访问字段的值。

class Car
{
    private string model;

    public string Model
    {
        get { return model; }
        set { model = value; }
    }
}

3. 方法(Method)

方法是类中的函数,用于定义对象可以执行的行为。

class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

4. 构造函数(Constructor)

构造函数用于初始化类的实例。默认构造函数会由编译器自动生成,但你可以定义自定义构造函数。

class Car
{
    public string Model;
    public int Year;

    public Car(string model, int year)
    {
        Model = model;
        Year = year;
    }
}

5. 析构函数(Destructor)

析构函数在对象被垃圾回收时自动调用,用于释放资源。

class Car
{
    ~Car()  // 析构函数
    {
        Console.WriteLine("Car object is being destroyed.");
    }
}

五、类的访问修饰符

C# 提供了多种访问修饰符来控制对类和类成员的访问权限:

  • public:可以被任何类访问。
  • private:只能在类的内部访问。
  • protected:只能在类及其子类中访问。
  • internal:只能在当前程序集中访问。
  • protected internal:可以在当前程序集中以及从派生类中访问。
  • private protected:只能在当前类及其派生类中访问。
class Car
{
    private string model;  // 只能在Car类内部访问
    public int year;       // 可以在任何地方访问
}

六、类的继承

C# 支持类继承,子类可以继承父类的成员。继承让你可以创建一个新类,该类具备父类的功能,并可以添加自己的功能或重写父类的方法。

class Animal
{
    public void Eat()
    {
        Console.WriteLine("Animal is eating.");
    }
}

class Dog : Animal  // Dog 类继承 Animal 类
{
    public void Bark()
    {
        Console.WriteLine("Dog is barking.");
    }
}

Dog dog = new Dog();
dog.Eat();  // 继承自Animal类的方法
dog.Bark(); // Dog类自己的方法

七、多态性

多态性使得一个父类引用可以指向子类对象,调用方法时会根据实际对象类型执行相应的方法。

1. 方法重写(Overriding)

通过重写(override)父类的方法,子类可以提供自己的实现。

class Animal
{
    public virtual void Speak()
    {
        Console.WriteLine("Animal speaks");
    }
}

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

Animal animal = new Dog();
animal.Speak();  // 输出 Dog barks

2. 方法重载(Overloading)

方法重载是指同名方法可以根据不同的参数类型或数量来区分。

class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }
}

八、类的实例化和内存管理

1. 类实例化

通过 new 关键字来创建类的实例,并调用构造函数初始化对象。

Person person = new Person("Alice", 25);

2. 类的内存管理

  • 堆内存:类实例通常分配在堆内存中,通过引用进行访问。
  • 垃圾回收(GC):类实例的内存会在不再使用时由垃圾回收器回收。

九、参考文献和文档


通过类,你可以实现强大的面向对象编程功能,提升代码的可维护性、扩展性和重用性。

更多详细内容,请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *