在这种情况下,您的类型本身必须是通用的。
class GridConfigurator<TData, TGrid>
where TData : class
{
public DataGridForm<TData, TGrid> DataGrid { get; private set; }
public DataGridForm<TData, TGrid> GridConfig<TData, TGrid>()
{
return DataGrid = new DataGridForm<TData, TGrid>();
}
}
但我不明白这门课的目的。GridConfig 方法具有设置 DataGrid 属性(具有私有设置器)的不明显副作用。如果我使用这个类,我永远不会猜到 GridConfig() 返回给我的值也被设置为 DataGrid 属性。换句话说:
var configurator = new GridConfigurator();
var firstGrid = configurator.GridConfig();
var firstReference = configurator.DataGrid;
var secondGrid = configurator.GridConfig();
var secondReference = configurator.DataGrid;
我会假设以下将返回false:
object.ReferenceEquals(firstGrid, secondGrid);
但我认为这将返回true:
object.ReferenceEquals(firstReference, secondReference);
因为在上面的代码中,我从来没有分配过 DataGrid 属性。目前尚不清楚名为 GridConfig() 的方法是否会产生这种效果。
使封闭类型(GridConfigurator)也通用似乎违背了您尝试的目的。当他们可以直接使用对 DataGridForm 的直接引用时,为什么有人会使用这种类型呢?
如果 GridConfig 方法应该做的不仅仅是分配一个新的 DataGridForm 的默认实例,那么让它成为一个静态工厂类,如下所示:
static class GridConfigurator
{
public static DataGridForm<TData,TGrid> GridConfig<TData, TGrid>(...) where TData: class
{
var grid = new DataGridForm<TData,TGrid>();
// do something with the parameters to this method to initialize the instance.
return grid;
}
}
我还会将该方法命名为 GridConfig 以外的名称。像 Configure() 或 Create()。