Blazor组件EventCallback绑定与@ref赋值加@符号是否有区别?
为什么两种写法效果完全一致
这是Blazor的Razor编译器的隐式类型推断特性决定的:
当组件参数的类型是EventCallback、或者你在使用@ref语法绑定组件引用时,编译器会自动识别引号内的内容是否对应父组件中定义的C#成员(方法、字段、属性),只要名称完全匹配,不管前面加不加@,都会被识别为C#成员引用,而非普通字符串字面量。两种写法编译后生成的底层代码完全相同,所以运行效果没有任何区别。
哪一种写法更规范
Blazor官方文档和社区通用的推荐规范是省略多余的@符号,也就是第一种写法更通用:
<MyComponent OnDateChange="MyDateChangedEvent" @ref="MyRef"></MyComponent>
这种写法更简洁,也是官方示例中出现频率更高的写法。当然这个规则没有强制约束,只要团队内部统一写法标准即可,不会导致功能问题。
属性值前添加@符号是否会产生实际差异
在你给出的这个场景下没有任何实际差异,编译器生成的执行代码完全一致。
只有当参数类型是string等可以直接接受字符串字面量的类型时,加不加@才会有区别:
Text="MyName"会被识别为直接赋值字符串"MyName"Text="@MyName"会被识别为引用C#变量MyName的值
而你的场景里OnDateChange是EventCallback<object>类型、@ref要求接收对应组件类型的实例引用,编译器不可能把引号内的内容当成普通字符串处理,所以加不加@都不会影响最终执行结果。
内容的提问来源于stack exchange,提问作者Ulterior
相关产品推荐
相关产品推荐

