私はこのような外観の一般的なフラットファイルリーダーを構築しています。何とかこのジェネリック医薬品を使いすぎてもいいですか?
public class GenericReader<TComposite, THeader, TData, TTrailer>
where TComposite : GenericComposite<THeader, TData, TTrailer>, new()
where THeader : new()
where TData : new()
where TTrailer : new()
{
public TComposite Read()
{
var composite = new TComposite();
composite.Header = new THeader();
composite.Data = new TData();
composite.Trailer = new TTrailer();
return composite;
}
}
このように消費される可能性があります。
var reader = new GenericReader<Composite<Header, Data, Trailer>, Header, Data, Trailer>();
var composite = reader.Read();
Console.WriteLine(composite.Data.SomeProperty);
Console.ReadLine();
ここに使用されるクラスがあります。
public class Composite<THeader, TData, TTrailer> : GenericComposite<THeader, TData, TTrailer>
{
}
public class GenericComposite<THeader, TData, TTrailer>
{
public THeader Header { get; set; }
public TData Data { get; set; }
public TTrailer Trailer { get; set; }
}
public class Header {
public string SomeProperty { get { return "SomeProperty"; } }
}
public class Data {
public string SomeProperty { get { return "SomeProperty"; } }
}
public class Trailer {
public string SomeProperty { get { return "SomeProperty"; } }
}
私はGenericReaderでそのジェネリック型情報を削除するか、またはカプセル化できるか方法はありますか?私は何かが欠けているものを私に見せるために余分な目を探しています。私たちはすでにインタフェースを返すことで何かを行い、消費者をキャストするようにしましたが、それは私の意見では間違った場所に責任を移してしまい、さらに小さなパフォーマンス上のペナルティがあります。
ありがとうございました。
編集:私はTCompositeは必要ありません。私はGenericCompositeを返すことができます。どうすればそれを逃すことができますか?
public class GenericReader<THeader, TData, TTrailer>
where THeader : new()
where TData : new()
where TTrailer : new()
{
public GenericComposite<THeader, TData, TTrailer> Read()
{
var composite = new GenericComposite<THeader, TData, TTrailer>();
composite.Header = new THeader();
composite.Data = new TData();
composite.Trailer = new TTrailer();
return composite;
}
}
public class GenericComposite<THeader, TData, TTrailer>
{
public THeader Header { get; set; }
public TData Data { get; set; }
public TTrailer Trailer { get; set; }
}
[コードレビューSE](http://codereview.stackexchange.com/)を参照してください。このようなレビュータスクには本当に適しています。 – tmesser
私はこの質問に合っていると思います。ジェネリック型の引数(と型システムの話は間違いなくSOの話題です)とそれを単純化する方法のように、コードレビューではありません。 –
私にとってGenericReaderは私が何かを紛失していない限り、工場から一般的なタイプです。直後にそれを処分するためだけに作成するような音がします。では、Compositeを提供する以外にGenericReaderが存在する理由はありますか?コンポジットにインスタンスを生成する静的メソッドがありませんでしたか? – LightStriker