.razor.cs 中的函数覆盖错误,但 .razor 中没有

function override error in .razor.cs, but not in .razor

在 blazor 项目中,我创建了一个 public class BaseComponent : Microsoft.AspNetCore.Components.ComponentBase

所以我想要一些有点复杂的组件继承自这个 class。

现在,我添加了一个错误页面,并且在覆盖函数 OnInitialized 时看到一些不一致,但似乎不仅限于该函数。

这是编译无误的Error.razor文件:

@inherits BaseComponent
@code {

    protected override void OnInitialized()
    {
        base.OnInitialized();
    }
}

当我想将所有代码移动到 Error.razor.cs 文件时:

using WebApp.Shared;

namespace WebApp.Pages.Error
{
    public partial class Error : BaseComponent
    {
        protected override void OnInitialized() // error is here
        {
            base.OnInitialized();
        }
    }
}

我收到一条错误消息:'Error.OnInitialized()': no suitable method found to override

我试过让 Error.razor.cs 部分 class 继承自 Microsoft.AspNetCore.Components.ComponentBase 而不是我的 BaseComponent 也继承了这个 class 并且有一个覆盖OnInitialized 函数本身,它不会给出任何编译错误。

所以我的问题是:
为什么.razor文件没有编译错误,而.razor.cs文件有编译错误?

这是一个示例基本组件和用法,您可能希望将其用作模板。

注:

  1. 我将基本组件设为 class 而不是剃刀组件。任何 child 几乎肯定会覆盖内容。
  2. 我把基数class设为abstract所以不能直接用
  3. 我已经在所有内容中设置了命名空间。
// Components/MyComponentBase.cs
namespace WhosebugAnswers.Components
{
    public abstract class MyComponentBase : ComponentBase
    {
        [Parameter] [EditorRequired] public string Header { get; set; } = String.Empty;

        [Parameter] public RenderFragment? ChildContent { get; set; }   
    }
}
// Components/MyDiv.razor
@namespace WhosebugAnswers.Components
@inherits MyComponentBase

<h3>@this.Header</h3>
<div class="m-2">
    @this.ChildContent
</div>
// Components/MyDiv.razor.cs
namespace WhosebugAnswers.Components
{
    public partial class MyDiv : MyComponentBase 
    {
        protected override void OnInitialized()
        {
            base.OnInitialized();
        }
    }
}

以及Index.razor

中的用法
@page "/"
@page "/Index"
@using WhosebugAnswers

<PageTitle>Index</PageTitle>

<h1>Hello, world!</h1>

Welcome to your new app.

<SurveyPrompt Title="How is Blazor working for you?" />
<WhosebugAnswers.Components.MyDiv Header = "Hello Blazor">
    My Div Content
</WhosebugAnswers.Components.MyDiv>