我有一个实现的更清洁的类,IDataReader
它的作用是过滤任何DateTime
超出 SQL ServerDateTime
范围的值并返回DBNull
(这个类的输出被输入到 aSqlBulkCopy
并且我的数据源可以返回 1/ 1/1753)
我的问题是接口的函数之一返回一个新的IDataReader
,我想要的是任何派生类都不需要重写该函数来返回一个新对象本身。这是一个例子
public class SqlServerDataCleaner : IDataReader
{
public SqlServerDataCleaner(IDataReader dataSource)
{
this.dataSource = dataSource;
//(Snip)
}
//(Snip)
public virtual IDataReader GetData(int i)
{
return new SqlServerDataCleaner(dataSource.GetData(i));
}
}
class SqlServerDataCleanerDerived : SqlServerDataCleaner
{
public SqlServerDataCleanerDerived (IDataReader dataSource)
: base(dataSource)
{
}
//(Snip)
//Need to return the correct class
public override IDataReader GetData(int i)
{
return new SqlServerDataCleanerDerived (dataSource.GetData(i));
}
}
有什么方法可以消除对覆盖的需要,GetData
以便父类将自动在其副本中创建该类的最派生形式GetData
(假设所有派生类将始终具有Classname(IDataReader)
构造函数)?