この場合、タイプ自体は汎用でなければなりません。
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プロパティとして設定されていることは決してありません。言い換えれば:
object.ReferenceEquals(firstGrid, secondGrid);
しかし、私は、これは真を返すと仮定します:
var configurator = new GridConfigurator();
var firstGrid = configurator.GridConfig();
var firstReference = configurator.DataGrid;
var secondGrid = configurator.GridConfig();
var secondReference = configurator.DataGrid;
私は次のようにfalseを返します引き受ける
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()と同様です。
共通の機能をインターフェイス 'IDataGridForm'に入れて、そのタイプのプロパティを持つことはできませんか? – Corak
私はあなたを得ることができません、詳細を説明できますか? – saber
さて、 'DataGridForm'をどうやって*使用したいですか?例えば、私はあなたがフォームを '表示する 'と思っています。したがって、メソッド 'Display()'を使ってインタフェース 'IDataGridForm'を作成してください。今度はあなたのクラス 'DataGridFormがそのインターフェースを実装するようにしましょう。これを行うには 'Display()'メソッドが必要です。今度はプロパティ 'public IDataGridForm DataGrid {get;プライベートセット; } '。このプロパティは 'DataGridForm を含むことができ、必要に応じてどこでも' Display() 'できます。 –
Corak