일반 공분산에 묶일 수있는 객체 지향 문제가 있습니다. 나는 모듈은 일반적인 방법을 포함 ... 기록의 다른 유형을 가져 오기위한 모듈 형 시스템을 구축하려고하고 SalesModule 특정 로직을 처리하는 기능을 ...일반 공분산 및 SuperType으로 변환
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);
어떻게하면 재정의 된 메소드를 호출 할 수있는 모듈을 선언 할 수 있습니까?
좋은 예 ... 자, 리팩터링하는 법 ... :) 고마워! –