编辑
2026-06-05
C#
0

目录

📌 上节回顾
💡 核心知识讲解
方法是什么?用工厂类比秒懂
方法的基本结构,拆开看就这几块
参数:向方法"投料"的方式
返回值:方法加工完把结果"送出来"
方法重载:同名方法,不同"投料规格"
💻 VS2026 操作步骤
📋 完整代码示例
🏭 工业实战小案例
⚠️ 避坑提醒
这几个坑,我替你踩过了
📝 本节总结

注塑车间的质检程序里,有一段判断产品是否合格的逻辑。

你写了一遍,能用。

然后领导说:"冲压线也要加这个判断。"你又复制了一遍。

焊接线要加?再复制。

三条线改完,参数阈值调整,你要找三处去改……

改漏了一处,生产线报了假警,被领导点名。

这不是你粗心,是你还没用上"方法"这把利器。

学完今天这节,这种情况彻底消失。


📌 上节回顾

「上一节我们学了 Dictionary<K,V> 字典集合,掌握了用"键值对"快速存取设备数据的方法。

今天在这个基础上,我们进一步学习如何把重复逻辑封装成方法,让代码可以反复调用、灵活传参。」


💡 核心知识讲解

方法是什么?用工厂类比秒懂

你可以把**方法(Method)**想象成车间里的一台专用设备。

你把原材料(参数)送进去,设备加工完,把成品(返回值)送出来。

每次需要加工,你不用重新造一台设备,直接调用就行。

这就是方法的核心价值:定义一次,调用多次,逻辑集中,易于维护。


方法的基本结构,拆开看就这几块

一个完整的方法长这样:

访问修饰符 返回类型 方法名(参数列表) { // 方法体:具体逻辑 return 返回值; }
部分作用工厂类比
访问修饰符控制谁能调用车间门禁权限
返回类型告诉调用者结果是什么类型成品规格说明
参数列表调用时传入的数据投料口
方法体实际执行的逻辑加工工序
return把结果送出去出料口

「记住:如果方法不需要返回任何结果,返回类型写 void(空的意思),就像有些设备只做动作、不出料。」


参数:向方法"投料"的方式

参数分两种你最常用的:

① 普通参数(值传递)——把数值的"副本"传进去,原始数据不受影响。就像你给设备一份加工单的复印件,原件还在你手里。

② 默认参数——调用时可以不传,方法里有预设值。就像设备有默认转速,不特别指定就按默认跑。

csharp
// 有默认参数的方法示例 static bool CheckTemperature(double deviceTemp, double alarmThreshold = 85.0) { return deviceTemp >= alarmThreshold; }

调用时可以这样写:

  • CheckTemperature(92.5) — 用默认阈值 85°C 判断
  • CheckTemperature(92.5, 90.0) — 自定义阈值 90°C

「默认参数必须放在参数列表的最后面,不能放在普通参数前面,否则编译器会报错。」


返回值:方法加工完把结果"送出来"

return 关键字负责把结果送出方法。

返回值的类型要和方法声明的返回类型完全一致

如果方法声明返回 int,你 return 了一个 string,编译器直接报错,不含糊。

⚠️ void 方法里也可以写 return;(不带值),作用是提前结束方法执行,相当于"紧急停机"。


方法重载:同名方法,不同"投料规格"

**方法重载(Overload)**是指:同一个类里,方法名相同,但参数的数量或类型不同。

还是工厂类比——同一台设备,有三个投料口:

  • 小口:接受单个温度值
  • 中口:接受温度+设备编号
  • 大口:接受温度+设备编号+采样时间

调用的时候,C# 编译器会根据你传的参数,自动匹配对应的那个方法。

csharp
// 三个重载版本,方法名完全相同 static string GetAlarmMessage(double deviceTemp) { ... } static string GetAlarmMessage(double deviceTemp, string deviceId) { ... } static string GetAlarmMessage(double deviceTemp, string deviceId, DateTime sampleTime) { ... }

「重载的判断依据是参数的数量和类型,与返回值类型无关。两个方法只有返回值不同,不构成重载,编译器会报错。」


💻 VS2026 操作步骤

Step 1:新建控制台项目

打开 VS2026,选择 文件 > 新建 > 项目,搜索"控制台应用",选 .NET 10,项目名填 MethodDemo,点创建。

Step 2:在 Program.cs 中编写方法

Program.cs 的顶层语句区域外(即类的内部),开始输入方法名,VS2026 IntelliSense 会实时提示参数类型和重载版本。

VS2026 Copilot 辅助:输入 // 检查设备温度是否超过报警阈值 这行注释后按 Tab,Copilot 会根据注释语义自动生成方法体,你只需要确认逻辑是否符合需求。

Step 3:调用方法并查看输出

Main 方法(或顶层语句)中调用你写好的方法,按 F5 运行。

控制台会输出方法的返回结果。

VS2026 Copilot 辅助:在调用处输入方法名后,Copilot 会自动补全参数,并在悬浮提示中显示所有可用的重载版本,帮你快速选择合适的参数组合。

Step 4:使用 Vibe Coding 提示词加速开发

在 Copilot Chat 面板中,输入以下 Prompt:

帮我用 C# 14 写一个方法, 功能是:判断注塑机的模具温度是否超过报警阈值, 支持传入设备编号和采样时间, 方法要有3个重载版本, 变量名使用工业语义命名, 加上中文注释。

Copilot 会直接生成带重载的完整方法组,你复制进项目即可运行。


📋 完整代码示例

这段代码实现了:用方法封装注塑机温度报警判断逻辑,包含默认参数、返回值和三个重载版本。

csharp
// ============================================================ // 文件:MethodDemo / Program.cs // 环境:VS2026 + .NET 10 + C# 14 // 功能:方法定义、参数、返回值与重载综合演示 // 工业场景:注塑车间设备温度报警判断 // ============================================================ using System; namespace MethodDemo { class Program { static void Main() { // 场景1:只传温度,使用默认阈值 bool result1 = CheckTemperature(92.5); Console.WriteLine($"温度 92.5°C,默认阈值判断:{(result1 ? "⚠️ 报警" : "✅ 正常")}"); // 场景2:传温度 + 自定义阈值 bool result2 = CheckTemperature(88.0, 90.0); Console.WriteLine($"温度 88.0°C,阈值 90°C 判断:{(result2 ? "⚠️ 报警" : "✅ 正常")}"); // 场景3:传温度 + 设备编号,获取格式化报警消息 string message1 = GetAlarmMessage(95.3, "INJ-001"); Console.WriteLine(message1); // 场景4:传温度 + 设备编号 + 采样时间,获取完整报警记录 string message2 = GetAlarmMessage(95.3, "INJ-001", DateTime.Now); Console.WriteLine(message2); // 场景5:批量检查多台设备,演示方法复用价值 string[] deviceIds = { "INJ-001", "INJ-002", "INJ-003" }; double[] temperatures = { 78.0, 91.5, 86.3 }; Console.WriteLine("\n--- 批量设备温度巡检 ---"); for (int i = 0; i < deviceIds.Length; i++) { // 复用同一个方法,逻辑只维护一处 string report = GetAlarmMessage(temperatures[i], deviceIds[i], DateTime.Now); Console.WriteLine(report); } } // ============================================================ // 方法定义区(静态方法,属于 Program 类) // ============================================================ // 方法1:最简版——只判断温度,有默认报警阈值 // 返回 true 表示超温报警,false 表示正常 static bool CheckTemperature(double deviceTemp, double alarmThreshold = 85.0) { return deviceTemp >= alarmThreshold; } // 方法2:重载版1——传入设备编号,返回格式化报警消息 static string GetAlarmMessage(double deviceTemp, string deviceId) { // 复用 CheckTemperature 方法,避免重复写判断逻辑 bool isAlarming = CheckTemperature(deviceTemp); string status = isAlarming ? "超温报警" : "温度正常"; return $"[{deviceId}] 当前温度:{deviceTemp:F1}°C — {status}"; } // 方法3:重载版2——额外传入采样时间,返回带时间戳的完整记录 static string GetAlarmMessage(double deviceTemp, string deviceId, DateTime sampleTime) { bool isAlarming = CheckTemperature(deviceTemp); string status = isAlarming ? "超温报警" : "温度正常"; // 时间格式化为 HH:mm:ss,便于日志记录 string timeStr = sampleTime.ToString("HH:mm:ss"); return $"[{timeStr}] [{deviceId}] 温度:{deviceTemp:F1}°C — {status}"; } } }

image.png

运行后,控制台会依次输出每台设备的温度状态,报警设备标注"超温报警",正常设备标注"温度正常"。批量巡检部分会打印三台注塑机的完整时间戳记录。你会直观感受到:同一段判断逻辑,写一次,三条生产线都能用。


🏭 工业实战小案例

场景任务: 光伏电站逆变器巡检系统需要一个方法,根据逆变器编号和当前功率,判断是否低于额定功率的 80%(欠功率告警),并返回格式化的巡检日志字符串。

思路拆解:

  1. 方法需要接收逆变器编号(string)和当前功率(double)两个参数。
  2. 额定功率用默认参数(ratedPower = 50.0 kW),方便不同型号复用。
  3. 计算功率比率,低于 80% 则标记为欠功率。
  4. 返回一条包含编号、当前功率、状态的日志字符串。
  5. 主程序循环调用,模拟5台逆变器的巡检。
csharp
// 光伏逆变器欠功率巡检方法 static string CheckInverterPower(string inverterId, double currentPower, double ratedPower = 50.0) { // 计算实际功率占额定功率的百分比 double powerRatio = currentPower / ratedPower; bool isUnderPower = powerRatio < 0.8; string status = isUnderPower ? "⚠️ 欠功率告警" : "✅ 运行正常"; return $"[{inverterId}] 当前功率:{currentPower:F1}kW / 额定:{ratedPower:F0}kW ({powerRatio:P0}) — {status}"; } Console.OutputEncoding = System.Text.Encoding.UTF8; // 模拟5台逆变器巡检 string[] inverterIds = { "INV-01", "INV-02", "INV-03", "INV-04", "INV-05" }; double[] powers = { 48.5, 38.0, 50.1, 35.6, 44.2 }; foreach (var (id, power) in inverterIds.Zip(powers)) { Console.WriteLine(CheckInverterPower(id, power)); }

image.png 运行后,控制台输出5台逆变器的巡检结果,INV-02 和 INV-04 因功率低于 80% 触发欠功率告警,其余显示正常,一目了然。


⚠️ 避坑提醒

这几个坑,我替你踩过了

坑1:重载版本只改了返回值类型

❌ 错误做法:

csharp
static int GetAlarmCode(double deviceTemp) { return 1; } static string GetAlarmCode(double deviceTemp) { return "alarm"; } // 编译报错

✅ 正确做法:重载必须在参数数量或类型上有区别,不能只改返回值。 📌 原因:编译器靠参数区分调用哪个重载,返回值它看不到。


坑2:默认参数没放在最后

❌ 错误做法:

csharp
static bool Check(double threshold = 85.0, string deviceId) { ... } // 编译报错

✅ 正确做法:

csharp
static bool Check(string deviceId, double threshold = 85.0) { ... }

📌 原因:有默认值的参数必须排在没有默认值的参数后面,否则编译器不知道哪个参数被省略了。


坑3:void 方法里写了 return 某个值

❌ 错误做法:

csharp
static void PrintAlarm(string msg) { return msg; } // 编译报错

✅ 正确做法:void 方法只能写 return;(不带值)或者不写 return。 📌 原因:void 的意思是"不返回任何东西",你硬塞一个值进去,编译器不认。


📝 本节总结

「学完本节,你掌握了:」

方法的基本结构,包括访问修饰符、返回类型、参数列表和方法体的完整写法。你知道了如何用默认参数让方法调用更灵活,用 return 把结果送出来。你还学会了方法重载——同一个名字,不同参数组合,C# 自动匹配。最重要的是,你理解了为什么要把逻辑封装进方法:写一次,到处用,改一处,全生效

下一节的 ref / out / in 参数修饰符,会让你的方法具备"双向通道"的能力,敬请期待。


📖 本文是《C# 工业数字化应用开发专家》系列第 2-4 节

上一节:【Dictionary<K,V> 字典集合入门】

下一节:【ref / out / in 参数修饰符】(明天更新)

💬 你在工作中有没有写过"复制粘贴五六遍、改一处漏改三处"的代码?

欢迎在评论区说说你的场景,也许下一篇案例就来自你的留言。

🔔 还没关注的同学记得点击关注,系列课程持续更新,学完这 420 节,从工厂小白到工业软件开发专家,我们一起走。


#C#编程入门 #工业数字化 #工厂工程师 #软件开发 #编程学习

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!