c# - 初始化 Blazor 组件中的对象
问题描述
使用此 Blazor 组件:
@page "/counter"
<h1>Counter</h1>
<p>Current count: @_a.CurrentCount</p>
<button class="btn btn-primary" onclick="@_b.IncrementCount">Click me</button>
@functions {
private readonly ClassA _a = new ClassA();
private readonly ClassB _b = new ClassB(_a);
class ClassA
{
public int CurrentCount { get; set; }
}
class ClassB
{
private readonly ClassA _classA;
public ClassB(ClassA classA)
{
_classA = classA;
}
public void IncrementCount() => _classA.CurrentCount++;
}
}
我收到此错误:
错误 CS0236 字段初始化程序无法引用非静态字段、方法或属性“__Counter._a”
该线程解释了如何在标准类中解决此错误:
但是为此,它需要一个构造函数。
是否可以在 Blazor 组件中添加构造函数?
如何解决这个错误?
解决方案
要保持类只读,您应该移至"code-behind"。然后你可以在构造函数上实例化类:
@page "/counter"
@inherits CounterBase
<h1>Counter</h1>
<p>Current count: @_a.CurrentCount ...
CounterBase.cs
using Microsoft.AspNetCore.Blazor.Components;
namespace YourApp.Pages
{
public class ClassA
{
public int CurrentCount { get; set; }
}
public class ClassB
{
private readonly ClassA _classA;
public ClassB(ClassA classA)
{
_classA = classA;
}
public void IncrementCount() => _classA.CurrentCount++;
}
public class CounterBase : BlazorComponent
{
protected readonly ClassA _a;
protected readonly ClassB _b;
//constructor
public CounterBase()
{
_a = new ClassA();
_b = new ClassB(_a);
}
...
推荐阅读
- c - 如何在 C 中返回 long 的结束数字(特别是当它们为 0 时)
- javascript - 在使用 Javascript 或 HTML 提交之前修改输入值
- angular - 无法在模态中动态加载或延迟加载组件
- ruby - Browsermob Proxy + Watir 没有连续捕获流量
- javascript - Express:为定义的路由提供静态文件
- php - 在文本框中从数据库中搜索数据以显示 - Laravel
- py2app - 如何引用通过 data_files 属性添加的文件?
- oracle - 如何在plsql中获取当前日期时间?
- c# - Microsoft.Crm.Sdk.Samples.HelperCode 无法编译
- javascript - 谷歌地图如何在 map-active.js 中添加第二个位置