|
本文结合工控场景讲解 C# 面向对象的核心概念(类 / 封装 / 继承 / 多态),并重点演示工业场景下的类设计(设备类、通信类),我会从工控实际应用出发,把抽象的面向对象概念落地到具体的工业编程场景中。 一、面向对象核心概念(工控视角解读) 先把四大核心概念翻译成工控工程师能理解的语言,再结合代码实现: 核心概念 | 工控视角解读 | 类比(工控场景) | 类(Class) | 设备 / 功能的 “模板”,定义设备有哪些属性(参数)和行为(方法) | PLC 的功能块(FB)、设备的技术手册(规定了参数和操作) | 封装(Encapsulation) | 隐藏设备内部细节,只暴露必要的操作接口,防止误操作 | 设备的操作面板(只给按钮 / 显示屏,内部电路不可见) | 继承(Inheritance) | 复用同类设备的通用属性 / 方法,只扩展特有功能 | 所有电机都有转速 / 启停(通用),伺服电机多了定位功能(特有) | 多态(Polymorphism) | 同一操作对不同设备有不同实现,适配多样化设备 | 同样是 “启动” 操作,电机启动是转起来,阀门启动是打开 |
--- 二、核心概念实战(工控场景代码实现) 1. 类(Class)—— 定义工业设备模板 核心逻辑:把工业设备的属性(参数)和行为(操作)封装成类,比如 “工业设备基类” 包含所有设备通用的属性(编号、状态)和方法(启停)。 using System;// 工业设备基类(所有工业设备的通用模板)public class IndustrialDevice{ // 通用属性(设备编号、运行状态、累计运行时长) public string DeviceId { get; set; } // 设备编号 public byte Status { get; set; } // 状态:0=停止,1=运行,2=故障 public int RunHours { get; set; } // 累计运行时长(小时) // 通用方法(启动、停止) public virtual void Start() // virtual标记为可被重写(为多态做准备) { if (Status == 2) { Console.WriteLine($"【{DeviceId}】设备故障,无法启动!"); return; } Status = 1; Console.WriteLine($"【{DeviceId}】设备启动成功!"); } public virtual void Stop() { Status = 0; Console.WriteLine($"【{DeviceId}】设备停止成功!"); } // 显示设备状态(通用方法) public void ShowStatus() { string statusDesc = Status switch { 0 => "停止", 1 => "运行", 2 => "故障", _ => "未知" }; Console.WriteLine($"=== 设备【{DeviceId}】状态 ==="); Console.WriteLine($"运行状态:{statusDesc}"); Console.WriteLine($"累计运行时长:{RunHours} 小时"); }} 2. 封装(Encapsulation)—— 保护设备核心参数 核心逻辑:对关键参数(如电机额定转速)做私有封装,只通过方法 / 属性控制读写,防止非法赋值(比如转速超过额定值)。 // 电机类(继承自工业设备基类,增加封装特性)public class Motor : IndustrialDevice{ // 私有核心参数(封装,外部不可直接修改) private float _ratedSpeed; // 额定转速(r/min) private float _currentSpeed; // 当前转速 // 公共属性(控制读写权限,加入校验逻辑) public float RatedSpeed { get => _ratedSpeed; // 只读,外部可获取但不可修改 init => _ratedSpeed = value > 0 ? value : throw new ArgumentException("额定转速必须大于0!"); } public float CurrentSpeed { get => _currentSpeed; set { // 封装核心逻辑:转速不能超过额定值,不能为负 if (value < 0) _currentSpeed = 0; else if (value > _ratedSpeed) { _currentSpeed = _ratedSpeed; Console.WriteLine($"【{DeviceId}】转速超限,自动降至额定转速{_ratedSpeed}r/min"); } else _currentSpeed = value; } } // 构造函数(初始化设备) public Motor(string deviceId, float ratedSpeed) { DeviceId = deviceId; RatedSpeed = ratedSpeed; Status = 0; // 初始状态:停止 RunHours = 0; _currentSpeed = 0; }} 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |