2

DataGridView を拡張する WinForms カスタム コントロールを構築しています。

interface IMyControl<A, B> { }
public partial class MyControl<A, B> : DataGridView, IMyControl<A, B>
{
}

AおよびBビジネス ドメイン オブジェクト タイプです。

ただし、コードはコンパイルされません。MyControl.Designer.csをコンパイルできません。

protected override void Dispose(bool disposing) //no suitable method found to override
{
    if (disposing && (components != null))
    {
        components.Dispose();
    }
    //'object' does not contain a definition for 'Dispose'
    base.Dispose(disposing); 
}

'Infrastructure.MyControl.Dispose(bool)': MyControl.Designer.cs をオーバーライドする適切なメソッドが見つかりません

4

1 に答える 1

1

汎用コントロールを持つことはできません。

これを試して:

interface IMyControl<A, B> { }
public partial abstract class MyControlBase<A, B> : DataGridView, IMyControl<A, B>
{
    // Generic code goes here
}

// Create non-generic wrappers for the generic base class
public partial class MyControl_One : DataGridView, MyControlBase<SomeType, OtherType>
{
     // Type-specific (if any) code goes here
}
public partial class MyControl_Two : DataGridView, MyControlBase<MyType, YourType>
{
     // Type-specific (if any) code goes here
}

現在ジェネリック基本クラスにあるジェネリック コードはそのままにしておきます。ラッパー クラスは、フォームに追加する非ジェネリック コントロールを提供する役割しか果たさないため、非常に薄くすることができます。

于 2012-10-08T23:12:50.980 に答える