带类型参数的自定义控件

时间:2012-10-08 22:56:59

标签: c# winforms oop design-patterns

我正在构建一个扩展DataGridView的WinForms自定义控件。

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

AB是业务域对象类型。

但是,代码不会编译。 <{1}}无法编译。

MyControl.Designer.cs
  

'Infrastructure.MyControl.Dispose(bool)':找不到合适的方法来覆盖MyControl.Designer.cs

1 个答案:

答案 0 :(得分: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
}

保留当前通用基类中的通用代码。包装类可以非常精简,因为它只用于提供非泛型控件以添加到表单中。