を実装するよりクリーンなクラスがあります。それは、SQL Server の範囲外の値をIDataReader
フィルタリングして代わりに返すことです (このクラスの出力は a に供給され、データ ソースは 1/ より前の日付を返すことができます)。 1/1753)DateTime
DateTime
DBNull
SqlBulkCopy
私の問題は、インターフェイスの関数の 1 つが newIDataReader
を返すことです。私が望むのは、派生クラスが関数をオーバーライドして新しいオブジェクト自体を返す必要がないことです。ここに例があります
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)
コンストラクターがあると仮定します)。