【发布时间】:2013-02-14 16:03:02
【问题描述】:
我有一个实现 IDataReader 的清洁类,它的作用是过滤 SQL Server 的 DateTime 范围之外的任何 DateTime 值并返回 DBNull(正在馈送此类的输出在SqlBulkCopy 中,我的数据源可以返回 1753 年 1 月 1 日之前的日期)
我的问题是接口的函数之一返回一个新的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 的副本中创建该类的最派生形式(假设所有派生类总是有一个@987654331 @构造函数)?
【问题讨论】:
标签: c# inheritance constructor overriding