Blazor中Razor文件调用其他类方法的优化实现方案咨询
方案可行性说明
你提出的「点击按钮时直接传入参数调用SumOfTwo方法」的优化方案完全可实现,无需单独声明处理方法和类实例字段,下面提供不同适用场景的实现方式:
实现1:直接内联调用(符合你提出的优化要求)
直接在按钮的点击事件中写匿名委托完成调用,无需单独定义Summerize方法,修改后的Razor页面代码如下:
<p>Number One:</p> <input type="number" id="Num1" @bind="Num1"/> <p>Number Two:</p> <input type="number" id="Num2" @bind="Num2"/> <p> <br/> <button class="btn btn-primary" @onclick="() => Sum = new SimpleMaths().SumOfTwo(Num1, Num2)">Sum</button> </p> <p> Sum: @Sum </p> @code { private int Num1, Num2, Sum = 0; }
实现2:静态工具类优化(更适合无状态运算工具场景)
你的SimpleMaths是无状态的运算工具类,可以将所有方法改为静态,无需每次调用都实例化对象,简化调用逻辑:
第一步 修改SimpleMaths类
namespace MyFirstApp.Classes { public static class SimpleMaths // 可改为静态类禁止非必要实例化 { public static int SumOfTwo(int a, int b) { return a + b; } public static int DistractionOfTwo(int a, int b) { return a - b; } public static int Division(int a, int b) { // 建议补充除零校验避免运行时异常 if (b == 0) throw new ArgumentException("除数不能为0", nameof(b)); return a / b; } } }
第二步 调整Razor页面调用代码
<!-- 其他UI代码不变 --> <button class="btn btn-primary" @onclick="() => Sum = SimpleMaths.SumOfTwo(Num1, Num2)">Sum</button>
实现3:依赖注入复用实例(适合复杂项目场景)
如果你的SimpleMaths后续会加入依赖项、需要维护状态,可通过依赖注入全局注册,避免重复实例化,也更方便后续做单元测试替换:
第一步 注册服务
在Program.cs中添加注册逻辑:
// 其他服务注册代码前添加 builder.Services.AddScoped<SimpleMaths>();
第二步 页面注入调用
@inject SimpleMaths Sim <!-- 页面顶部注入全局实例 --> <!-- UI代码不变 --> <button class="btn btn-primary" @onclick="() => Sum = Sim.SumOfTwo(Num1, Num2)">Sum</button> @code { private int Num1, Num2, Sum = 0; }
场景选择建议
- 仅临时调用一两次运算方法:选实现1,无需修改原有类逻辑
- 纯无状态工具类全项目复用:选实现2,性能最优调用最简便
- 类有状态、依赖其他服务、需要做单元测试 mock 替换:选实现3,可维护性最好
内容的提问来源于stack exchange,提问作者Tassisto
相关产品推荐
相关产品推荐

