注塑车间的质检程序里,有一段判断产品是否合格的逻辑。
你写了一遍,能用。
然后领导说:"冲压线也要加这个判断。"你又复制了一遍。
焊接线要加?再复制。
三条线改完,参数阈值调整,你要找三处去改……
改漏了一处,生产线报了假警,被领导点名。
这不是你粗心,是你还没用上"方法"这把利器。
学完今天这节,这种情况彻底消失。
「上一节我们学了 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) { ... }
「重载的判断依据是参数的数量和类型,与返回值类型无关。两个方法只有返回值不同,不构成重载,编译器会报错。」
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}";
}
}
}

运行后,控制台会依次输出每台设备的温度状态,报警设备标注"超温报警",正常设备标注"温度正常"。批量巡检部分会打印三台注塑机的完整时间戳记录。你会直观感受到:同一段判断逻辑,写一次,三条生产线都能用。
场景任务: 光伏电站逆变器巡检系统需要一个方法,根据逆变器编号和当前功率,判断是否低于额定功率的 80%(欠功率告警),并返回格式化的巡检日志字符串。
思路拆解:
string)和当前功率(double)两个参数。ratedPower = 50.0 kW),方便不同型号复用。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));
}
运行后,控制台输出5台逆变器的巡检结果,INV-02 和 INV-04 因功率低于 80% 触发欠功率告警,其余显示正常,一目了然。
坑1:重载版本只改了返回值类型
❌ 错误做法:
csharpstatic int GetAlarmCode(double deviceTemp) { return 1; }
static string GetAlarmCode(double deviceTemp) { return "alarm"; } // 编译报错
✅ 正确做法:重载必须在参数数量或类型上有区别,不能只改返回值。 📌 原因:编译器靠参数区分调用哪个重载,返回值它看不到。
坑2:默认参数没放在最后
❌ 错误做法:
csharpstatic bool Check(double threshold = 85.0, string deviceId) { ... } // 编译报错
✅ 正确做法:
csharpstatic bool Check(string deviceId, double threshold = 85.0) { ... }
📌 原因:有默认值的参数必须排在没有默认值的参数后面,否则编译器不知道哪个参数被省略了。
坑3:void 方法里写了 return 某个值
❌ 错误做法:
csharpstatic 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#编程入门 #工业数字化 #工厂工程师 #软件开发 #编程学习


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