3

これが可能かどうかはわかりませんが、これは私が考えていたことです:

public class ValidationControl<T> where T : Control, new()
{
    [Browsable(true)]
    [Category("Validation")]
    [DefaultValue(false)]
    public bool Required { get; set; }

    public ValidationControl() { Required = false; }

    public virtual void RunValidation() { ... }
}

次に、すべてのカスタム コントロールに対して、ジェネリック コントロールを再利用可能な基本クラスとして単純に使用できます。

public class ValidationTextBox : ValidationControl<TextBox> { }

public class ValidationComboBox : ValidationControl<ComboBox> { }

インターフェイスを使用できることは理解していますが、新しいコントロールを作成するたびに、必要なプロパティなどを再入力/コピー & ペーストする必要があります。また、TextBox/ComboBox に対してこの方法で仮想プロパティ/メソッドをオーバーライドすることはできません。これは可能ですか?

4

2 に答える 2

1

継承は、ジェネリックを使用する場合とは異なります。クラスが継承する必要があるものを「ジェネリック」な方法で指定したいのですが、それは機能しません。すでに言ったように、T から継承していないため、プロパティをオーバーライドすることはできません。

コントロールを機能させるには、コントロール タイプ (T) を継承する必要があります。

于 2012-08-09T12:26:18.823 に答える
0

また、TextBox/ComboBox に対してこの方法で仮想プロパティ/メソッドをオーバーライドすることはできません。これは可能ですか?

TextBox/ComboBox から何かをオーバーライドすることはできません。基本クラスの仮想メソッドのみをオーバーライドできます。たとえば、オーバーライド可能なメソッドは RunValidation() のみです (ValidationControl は基本クラスです)。

クラスには、TextBox/ComboBox、fe を含めることができます。

private T Control;

それにいくつかの呼び出しを行いますが、それだけです。

于 2012-08-09T12:23:43.850 に答える