You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:15:02