3

3 つのジェネリック型を持つクラスを作成しようとしていますが、タイプの 1 つは、他の 2 つのジェネリック型を持つ他のクラスから継承する必要があります。

私が本当に必要としているのは、それが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' は、ジェネリック型またはメソッド 'Form< TForm, TModel, TResult >' の型パラメーター 'TForm' として使用できません。'TForm' から 'Core.Web.Base.FormComponent< TModel, TResult >' へのボックス化変換または型パラメータ変換はありません。

このエラーを多くの場所で検索しましたが、3 つのジェネリック型があるケースは見つかりませんでした。ドキュメントも読みました が、それを使用してケースを解決できませんでした。

4

3 に答える 3