我遇到了一种看似“奇怪”的情况。复制:
//Comp1Base.fs
namespace ClassLibrary1
open Microsoft.AspNetCore.Components
type Comp1Base() =
inherit ComponentBase()
override __.BuildRenderTree(builder) = base.BuildRenderTree(builder)//Comp1.razor
@inherits ClassLibrary1.Comp1Base现在,Blazor项目没有编译:
Error CS0507 'Comp1.BuildRenderTree(RenderTreeBuilder)': cannot change access modifiers when overriding 'public' inherited member 'Comp1Base.BuildRenderTree(RenderTreeBuilder)' BlazorApp1 C:\Temp\qwerty\BlazorApp1\Microsoft.NET.Sdk.Razor.SourceGenerators\Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator\Comp1_razor.g.cs 85 N/AILSpy显示F#中被重写的成员是公共的,而基本成员是受保护的:


有办法让它起作用吗?
发布于 2022-09-12 15:12:25
恐怕您不能在F#中直接这样做。您可以像这样用C#编写一个更友好的F包装器类型(为了说明起见,未经测试的代码):
public class FSharpFriendlyComponentBase: ComponentBase
{
readonly Action<RenderTreeBuilder> _buildRenderTree
public FSharpFriendlyComponentBase(Action<RenderTreeBuilder> buildRenderTree) =>
_buildRenderTree = buildRenderTree;
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
base.BuildRenderTree(builder);
_buildRenderTree(builder);
}
}这样您就可以在F#中实现所需的行为:
let myComponentBase =
FSharpFriendlyComponentBase(fun builder ->
... your behavior here)发布于 2022-09-12 10:43:31
有点晚了,但我希望它能帮上忙:
In C# (我指的是C#)当将方法重写为 Microsoft Docs说。时,不能更改访问修饰符
https://stackoverflow.com/questions/71105988
复制相似问题