С этим компонентом 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'
Этот поток объясняет, как решить эту ошибку в стандартном классе:
Почему вы не можете использовать 'this' в инициализаторах?
Но для этого нужен конструктор.
Можно ли добавить конструктор в компоненте Blazor?
Как устранить эту ошибку?
Для того, чтобы классы были доступны только для чтения, вы должны перейти к "коду позади". Затем вы можете создавать экземпляры классов в конструкторе:
@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);
}
...