LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

一文搞懂C#⾯向对象编程及其应用场景

admin
2026年1月18日 21:8 本文热度 41

一、面向对象编程(OOP)核心思想

面向对象编程是一种以对象为核心的编程范式,它将现实世界中的事物抽象为程序中的对象,每个对象都包含自身的属性(数据)和行为(方法),通过对象之间的交互完成程序功能。其核心优势是提高代码的可复用性、可维护性和可扩展性,这也是 C# 作为面向对象语言的核心价值所在。

二、C# OOP 四大核心特性

1. 封装(Encapsulation)

概念:将对象的属性(字段)和行为(方法)封装在一个类中,隐藏对象内部的实现细节,仅通过公开的接口(公共方法 / 属性)与外部进行交互,同时可以控制对内部数据的访问权限。目的:保护对象的数据不被随意修改,提高代码的安全性和可维护性。C# 实现方式:通过访问修饰符(private/public/protected/internal等)控制成员访问权限,常用private隐藏字段,通过public属性暴露字段的读写操作。

// 封装示例:用户类public class User{    // 私有字段:隐藏内部数据,外部无法直接访问    private string _userName;    private int _age;    // 公共属性:暴露字段的读写接口,可添加数据验证逻辑    public string UserName    {        get { return _userName; }        set { _userName = value ?? string.Empty; } // 防止赋值为null    }    public int Age    {        get { return _age; }        set         {             // 数据验证:年龄必须大于0            if (value > 0)                _age = value;            else                throw new ArgumentOutOfRangeException("年龄必须大于0");        }    }    // 公共方法:暴露对象的行为    public void ShowUserInfo()    {        Console.WriteLine($"用户名:{UserName},年龄:{Age}");    }}

2. 继承(Inheritance)

概念:允许一个类(子类 / 派生类)继承另一个类(父类 / 基类)的属性和方法,子类可以复用父类的代码,同时可以扩展或重写父类的功能,实现代码复用和层次化设计。C# 关键规则

  • C# 只支持单继承(一个子类只能直接继承一个父类),但支持多层继承和接口多实现。
  • 父类中private成员无法被子类直接访问,protected成员可在子类内部访问。
  • 使用: 关键字实现继承,base关键字可调用父类的构造函数或成员。

// 父类:公共人员类public class Person{    public string Name { getset; }    public string Gender { getset; }    public void SayHello()    {        Console.WriteLine($"大家好,我是{Name}");    }}// 子类:学生类(继承自Person)public class Student : Person{    // 子类扩展自身独有的属性    public string StudentId { getset; }    public string Grade { getset; }    // 子类扩展自身独有的方法    public void Study()    {        Console.WriteLine($"{Name}正在{Grade}年级学习,学号:{StudentId}");    }}// 调用示例var student = new Student();student.Name = "张三";student.Gender = "男";student.StudentId = "2025001";student.Grade = "高三";student.SayHello(); // 复用父类方法student.Study();    // 子类自有方法

3. 多态(Polymorphism)

概念:允许同一操作作用于不同的对象,产生不同的执行结果。多态性使得程序具有更好的灵活性和可扩展性,是 OOP 的核心特性之一。C# 实现方式

  • 编译时多态
    :通过方法重载(Overload)实现(同一类中,方法名相同、参数列表不同(个数 / 类型 / 顺序))。
  • 运行时多态
    :通过方法重写(Override)实现(子类重写父类的虚方法 / 抽象方法,需配合virtual/abstract/override关键字)。

// 运行时多态示例// 父类:定义虚方法public class Animal{    public string Name { getset; }    // 虚方法:允许子类重写    public virtual void MakeSound()    {        Console.WriteLine("动物发出叫声");    }}// 子类1:狗类(重写父类虚方法)public class Dog : Animal{    public override void MakeSound()    {        Console.WriteLine($"{Name}(狗)汪汪叫");    }}// 子类2:猫类(重写父类虚方法)public class Cat : Animal{    public override void MakeSound()    {        Console.WriteLine($"{Name}(猫)喵喵叫");    }}// 调用示例:体现多态List<Animal> animalList = new List<Animal>(){    new Dog(){ Name = "旺财" },    new Cat(){ Name = "小白" },    new Animal(){ Name = "通用动物" }};foreach (var animal in animalList){    animal.MakeSound(); // 同一操作,不同对象执行不同结果}// 编译时多态示例(方法重载)public class Calculator{    // 重载1:两个int类型相加    public int Add(int a, int b)    {        return a + b;    }    // 重载2:三个int类型相加    public int Add(int a, int b, int c)    {        return a + b + c;    }    // 重载3:两个double类型相加    public double Add(double a, double b)    {        return a + b;    }}

4. 抽象(Abstraction)

概念:忽略对象的非本质细节,只提取和保留与业务相关的核心特征,形成抽象的类或接口。抽象的目的是简化复杂系统,定义统一的规范,让子类去实现具体细节。C# 实现方式

  • 抽象类
    :使用abstract关键字声明,不能被实例化,可包含抽象方法(无实现体,需子类强制实现)和非抽象方法(有实现体,可被子类复用)。
  • 接口
    :使用interface关键字声明,不能被实例化,所有成员都是公共的抽象成员(方法 / 属性 / 事件等,无需abstract关键字),一个类可以实现多个接口。

// 抽象类示例public abstract class Shape{    // 抽象属性:无实现体    public abstract double Area { get; }    // 非抽象方法:有实现体,可复用    public void ShowShapeType()    {        Console.WriteLine($"这是一个{this.GetType().Name},面积为:{Area}");    }}// 子类:圆形(必须实现抽象属性Area)public class Circle : Shape{    public double Radius { getset; }    // 实现抽象属性    public override double Area    {        get { return Math.PI * Radius * Radius; }    }}// 接口示例public interface IWorkable{    // 接口方法:无实现体    void Work();}public interface IEatable{    void Eat();}// 类实现多个接口public class Employee : IWorkableIEatable{    public string EmployeeName { getset; }    // 实现IWorkable接口方法    public void Work()    {        Console.WriteLine($"{EmployeeName}正在工作");    }    // 实现IEatable接口方法    public void Eat()    {        Console.WriteLine($"{EmployeeName}正在吃饭");    }}

三、C# OOP 关键辅助概念

  1. 类(Class)
    :对象的模板,定义了对象的属性和方法,是 OOP 的基本单元。
  2. 对象(Object)
    :类的实例,通过new关键字创建,是程序运行时的具体实体。
  3. 字段(Field)
    :类的内部数据,用于存储对象的状态,通常用private修饰。
  4. 属性(Property)
    :封装字段的访问接口,提供get(读取)和set(写入)方法,支持数据验证。
  5. 方法(Method)
    :类的行为,用于实现对象的功能逻辑。
  6. 构造函数
    :用于初始化对象的特殊方法,与类名相同,无返回值,可重载,通过new关键字调用。

四、C# OOP 实际应用场景

场景 1:业务实体建模(封装 + 继承)

在管理系统(如用户管理、订单管理)中,将业务实体抽象为类,通过继承实现实体的层次化。

  • 示例:User(基础用户)→ AdminUser(管理员用户)→ NormalUser(普通用户),管理员用户继承普通用户的基础属性,扩展权限管理方法。

场景 2:组件化开发(多态 + 接口)

在框架开发或模块化系统中,通过接口定义组件规范,不同组件实现接口提供不同功能,实现 “面向接口编程”。

  • 示例:日志框架中,定义ILogger接口(包含Info()/Error()方法),然后实现FileLogger(文件日志)、ConsoleLogger(控制台日志)、DatabaseLogger(数据库日志),业务代码只需依赖ILogger接口,无需关心具体实现,便于切换日志存储方式。

场景 3:通用功能复用(抽象类 + 继承)

对于有公共逻辑但具体细节不同的功能,用抽象类封装公共逻辑,子类实现具体细节,减少重复代码。

  • 示例:支付系统中,定义AbstractPayment抽象类(封装订单校验、金额计算等公共逻辑),子类AlipayPaymentWeChatPaymentUnionPayPayment分别实现各自的支付接口调用逻辑。

场景 4:灵活扩展的业务逻辑(多态)

在需要动态切换业务逻辑的场景中,多态可以让程序无需修改原有代码即可扩展新功能(符合 “开闭原则”)。

  • 示例:电商系统的订单支付方式切换,新增支付方式时,只需新增一个支付子类,无需修改原有订单处理逻辑。


阅读原文:原文链接


该文章在 2026/1/19 10:38:20 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved