代码之家  ›  专栏  ›  技术社区  ›  vernou

在Blazor组件中初始化对象

  •  0
  • vernou  · 技术社区  · 7 年前

    使用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字段初始值设定项无法引用非静态字段、方法或属性“_”计数器_a'

    此线程解释如何在标准类中解决此错误:

    Why can't you use 'this' in member initializers?

    但对于这一点,它需要一个构造函数。

    可以在Blazor组件中添加构造函数吗?

    如何解决这个错误?

    0 回复  |  直到 7 年前
        1
  •  7
  •   dani herrera    7 年前

    要使类保持只读,您应该移动到 "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);
            }
            ...
    
    推荐文章