我有一個面向對象問題,我認爲它可以與通用協方差關聯。我想建立一個模塊化系統導入不同類型的記錄...模塊包含了常用的方法,以及SalesModule包含用於處理特定的邏輯功能...通用協方差和鑄造到超類型
public interface IImportable { ... void BuildSqlDataRecord(); ... }
public class Sales : IImportable { ... }
public interface IModule<out T> where T : IImportable
{
void Import(IEnumerable<T> list); // Error Occurs here...
IEnumerable<T> LoadFromTextFile(TextReader sr);
}
public abstract class Module<T> : IModule<T> where T : IImportable
{
public void Import(IEnumerable<T> list) { ... T.BuildSqlDataRecord(); ... }
public IEnumerable<T> LoadFromTextFile(TextReader sr) { ... }
}
public class SalesModule : Module<Sales>
{
public override void BuildSqlDataRecord() { ... };
}
,並在其他功能:
//Module<IImportable> module = null;
IModule<IImportable> module = null;
if(file.Name == "SALES")
module = new SalesModule();
else
module = new InventoryModule();
var list = module.LoadFromTextFile(sr);
module.Import(list);
如何聲明模塊以便我可以調用重寫的方法?
偉大的例子...現在,如何重構... :)謝謝! –