Я пытаюсь создать класс, который имеет 3 универсальных c типа, и один из типов должен наследовать от этого другого класса, который имеет другие 2 универсальных c типа.
То, что я на самом деле необходимо, чтобы IForm
наследовал от FormComponent
, поэтому в нем реализованы все его методы.
Form.razor
@typeparam TForm
@typeparam TModel
@typeparam TResult
<EditForm Model="@Model" OnValidSubmit="@HandleValidSubmit">
@ChildContent
</EditForm>
Form.razor.cs
public partial class Form<TForm, TModel, TResult>
where TForm : FormComponent<TModel, TResult>
{
[Parameter]
public TForm FormRef { get; set; }
[Parameter]
public EventCallback<TResult> OnValidSubmit { get; set; }
[Parameter]
public TModel Model { get; set; }
// ...
// some other properties
}
FormComponent.cs
public abstract class FormComponent<TModel, TResult> : BaseDomComponent
{
[CascadingParameter]
public TModel Model { get; set; }
public abstract TResult OnValidSubmit();
// ...
// some other properties
}
Код, из которого я использую форму
<Form Model="@Entity" FormRef="@_formRef" OnValidSubmit="@HandleValidSubmit">
<XYZForm @ref="_formRef" />
<Button ButtonType="ButtonType.Submit">Submit</Button>
</Form>
Но это дает мне ошибку
Ошибка CS0314 Тип 'TForm 'нельзя использовать в качестве параметра типа' TForm 'в типе c типа generic или методе' Form '. Не существует преобразования в бокс или преобразования параметров типа из 'TForm' в 'Core.Web.Base.FormComponent '
Я искал эту ошибку во многих местах, но не нашел любой случай, когда было 3 типа c. Я также прочитал документы , но не смог использовать это для решения моего дела.