当前位置: 首页 > article >正文

C#中类‌的核心定义

‌C# 类‌是面向对象编程(OOP)中的核心概念之一,用于定义对象的模板或蓝图,包含数据成员(字段、属性)和函数成员(方法、事件等)。类提供了封装机制,将数据和操作数据的方法组合在一起,隐藏内部实现细节,只对外提供有限的接口,从而提高代码的可维护性和安全性。‌

1. 类的本质‌

  • 引用类型‌:对象存储在堆(Heap)中,变量持有对象引用。
  • ‌面向对象三大特性‌:
    ‌封装‌:通过访问修饰符(public/private/protected)控制成员可见性。
    ‌继承‌:单继承(class Derived : Base),支持多层继承。
    ‌多态‌:通过虚方法(virtual)、抽象方法(abstract)和重写(override)实现。

2. 类的基本结构‌

[访问修饰符] class 类名 [: 基类] [, 接口1, 接口2...]
{
    // 成员定义
    private string _field;          // 字段
    public string Property { get; set; } // 属性
    public void Method() { }        // 方法
    public 类名() { }               // 构造函数
    ~类名() { }                     // 析构函数(极少使用)
}

‌3. 核心成员类型‌

成员类型说明示例
‌字段‌存储数据的变量,通常设为private private int _id;
‌属性‌封装字段,控制读写逻辑public string Name { get; private set; }
‌方法‌定义对象行为public void Save() { … }
‌构造函数‌初始化对象,支持重载public Person(string name) { … }
‌事件‌用于发布-订阅模式public event EventHandler OnClick;
‌索引器‌使对象支持类似数组的访问public int this[int i] { get; set; }

‌4. 关键特性‌

  • ‌静态成员‌:类级别共享,通过 static 关键字定义。
public static int Count;  // 静态字段
public static void Log() { } // 静态方法
  • ‌抽象类‌:用 abstract 修饰,不能实例化,用于定义通用逻辑。
public abstract class Shape { public abstract double Area(); }
  • ‌密封类‌:用 sealed 修饰,禁止继承。
public sealed class StringUtils { }
  • ‌分部类‌:用 partial 拆分类到多个文件。
// File1.cs
public partial class Data { } 
// File2.cs
public partial class Data { }

‌5. 类 vs 结构体(Struct)‌

‌特性‌‌类(Class)‌‌结构体(Struct)‌
‌内存分配‌堆内存栈内存(通常)
‌赋值行为‌复制引用(修改副本影响原对象)复制值(副本独立)
‌继承‌支持不支持
‌默认构造器‌有无参构造器C# 10 前不能显式定义无参构造器
‌适用场景‌复杂对象、需继承或引用语义小型数据(如坐标点、颜色值)

‌6. 最佳实践‌

  1. 封装数据‌:字段设为 private,通过属性暴露必要访问。
  2. 避免过深继承‌:优先使用组合而非继承。
  3. 不可变设计‌:对线程安全的数据使用 readonly 字段。
public class ImmutablePoint
{
    public readonly int X;
    public readonly int Y;
    public ImmutablePoint(int x, int y) => (X, Y) = (x, y);
}
  1. 资源释放‌:实现 IDisposable 接口管理非托管资源,而非依赖析构函数。
public class FileReader : IDisposable
{
    private Stream _stream;
    public void Dispose() => _stream?.Close();
}

‌7. 典型类示例‌

public class BankAccount
{
    // 字段
    private decimal _balance;
    private readonly string _owner;

    // 属性
    public decimal Balance => _balance; // 只读属性

    // 构造函数
    public BankAccount(string owner, decimal initialBalance)
    {
        _owner = owner;
        _balance = initialBalance;
    }

    // 方法
    public void Deposit(decimal amount)
    {
        if (amount <= 0)
            throw new ArgumentException("Deposit amount must be positive");
        _balance += amount;
    }

    // 重写 ToString
    public override string ToString() => $"{_owner}'s account: {_balance:C}";
}
// 使用
var account = new BankAccount("Alice", 1000);
account.Deposit(500);
Console.WriteLine(account); // 输出: Alice's account: $1,500.00

掌握类的核心设计原则,可以高效构建可维护的面向对象程序。根据场景选择类或结构体,合理使用封装、继承和多态,是提升代码质量的关键。


http://www.kler.cn/a/583889.html

相关文章:

  • 【存储中间件】Redis核心技术与实战(一):Redis入门与应用(常用数据结构:字符串String、哈希Hash、列表List)
  • LLM:了解大语言模型
  • OBS推WebRTC流,并添加毫秒级时间显示
  • K8S中的etcd数据库备份与恢复
  • 树莓百度百科更新!宜宾园区新业务板块全解析
  • 建筑兔零基础自学记录45|获取高德/百度POI-1
  • AI理论基础
  • 重生之我在学Vue--第12天 Vue 3 性能优化实战指南
  • SpaceSync智能排班:重构未来办公空间的神经中枢
  • 聚划算!三个模型对比预测!CNN-GRU、GRU、CNN三模型多变量时序光伏功率预测
  • 基于boss直聘的招聘数据可视化分析平台-Flask+html
  • PAT乙级(1022 D进制的A+B)C语言
  • ADC采样和存储数据之间的关系
  • 一键阐述“多线程、多进程、多任务”的场景需求
  • Deepseek Chatgpt Kimi 推荐的深度学习书单
  • OpenRewrite配方之import语句的顺序——org.openrewrite.java.OrderImports
  • Spring(一)
  • 工具(十二):Java导出MySQL数据库表结构信息到excel
  • 5G/6G通信技术
  • 便利店商品推荐数字大屏:基于python和streamlit