我正在构建一个通用的平面文件阅读器,看起来像这样.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
它可以像这样消费.
var reader = new GenericReader<Composite<Header, Data, Trailer>, Header, Data, Trailer> ();
var composite = reader.Read();
Console.WriteLine(composite.Data.SomeProperty);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
这是使用的类.
public class Composite<THeader, TData, TTrailer> : GenericComposite<THeader, TData, TTrailer> …
Run Code Online (Sandbox Code Playgroud)