WPF C# 如何跨类调用变量并向CalcDisplay类传递所需参数
实现方案
最高效的两种实现方式(按需选择)
方案1:方法直接传参(无状态,单次计算首选)
这种方式性能开销最低,调用灵活,不需要给CalcDisplay维护额外状态,适合偶发的单次计算场景。
修改后的CalcDisplay代码:
public class CalcDisplay { // 所需参数全部作为方法入参,不需要缓存任何实例 public double CalculateStudyHours(int credits, int weeks, double classHours) { return (credits * 10 / weeks) - classHours; } }
调用示例:
// 从存储的Semester列表中取出需要使用的学期实例 Semester targetSemester = ModuleListHandler.semesterDetails.First(); // 传入对应参数即可 CalcDisplay calc = new CalcDisplay(); double studyHours = calc.CalculateStudyHours(模块学分, targetSemester.Weeks, 每周课时);
方案2:构造函数注入Semester实例(有状态,多轮计算首选)
如果同一个学期需要计算多个模块的学习时长,选择这种方式可以避免重复传递weeks参数,代码更简洁。
修改后的CalcDisplay代码:
public class CalcDisplay { // 缓存当前关联的学期实例 private readonly Semester _semester; // 初始化时传入绑定的学期实例 public CalcDisplay(Semester semester) { _semester = semester; } // 计算时只需要传入模块专属参数即可 public double CalculateStudyHours(int credits, double classHours) { return (credits * 10 / _semester.Weeks) - classHours; } }
调用示例:
Semester targetSemester = ModuleListHandler.semesterDetails.First(); CalcDisplay calc = new CalcDisplay(targetSemester); // 多次计算不同模块的学习时长,无需重复传学期相关参数 double module1Hours = calc.CalculateStudyHours(20, 8); double module2Hours = calc.CalculateStudyHours(15, 6);
方案选型建议
- 单次计算场景优先选方案1,实现成本最低,无额外内存开销
- 同一学期多次计算场景优先选方案2,代码复用性更高
内容的提问来源于stack exchange,提问作者Sebastian Marshall
相关产品推荐
相关产品推荐

