파일 레이아웃을 설명하는 템플릿을 기반으로 구분 된 또는 고정 폭 파일을 가져올 파일 가져 오기 코드를 작성 중입니다.인터페이스 내에 인터페이스 구현
public interface IFileTemplate
{
string Name { get; set; }
bool IgnoreEmptyLines { get; set; }
}
DelimitedFileTemplate
클래스와 FixedWidthFileTemplate
클래스에 의해 사용됩니다
나는 인터페이스 IFileTemplate를 만들었습니다.
public interface IFileTemplateColumn
{
int ID { get; set; }
string Name { get; set; }
bool Ignore { get; set; }
}
이 인터페이스는 다음 DelimitedTemplateColumn
클래스에 의해 사용되며 FixedWidthTemplateColumn
클래스 :
는 또한 템플릿을 구성하는 각 열을 지정하는 인터페이스를 가지고있다.
이List<IFileTemplateColumn> Fields { get; set; }
내 문제는 내가의 목록을 구현하기 위해 왔어요 때이다 : 모두 DelimitedFileTemplate 및 FixedWidthFileTemplate 클래스로
내가 목록 IFileTemplate 컬럼의 일원했습니다 열 목록을해야합니다 예를 들어 DelimitedFileTemplate 및 FixedWidthFileTemplate 클래스 :public class FixedWidthFileTemplate : IFileTemplate
{
public int ID { get; set; }
public string Name { get; set; }
public List<FixedWidthFileTemplateColumn> Fields { get; set; }
}
나는 시도하고 List<DelimitedFileTemplateColumn>
또는 List<FixedWidthFileTemplateColumn>
와 List<IFileTemplateColumn>
을 구현하는 경우 컴파일러는 그렇지 않은 것을 불평 일치하는 List<IFileTemplateColumn>
.
이 내용을 이해할 수 있지만 ITemplateInterface에 열 목록을 포함시키지 않는 것이 좋습니다. 내가 생각할 수있는 유일한 방법은 Delimited 및 FixedWidth 클래스에 List<IFileTemplateColumn>
을 사용하고 getter 속성을 구분 된 또는 고정 폭 열 목록으로 캐스팅하도록하는 것입니다. 그러나 약간의 코드 냄새가 나는 것 같습니다. 누구든지이 일을 위해 더 좋은 방법을 제안 할 수 있습니까?
interface IFileTemplate<T> where T : IFileTemplateColumn
{
List<T> Fields { get; set; }
}
DelimitedFileTemplate
이 IFileTemplate<DelimitedFileTemplateColumn>
등등 구현 :
인터페이스를 구현 한 클래스에 코드를 추가하는 것이 좋습니다. 더 읽기 쉬울 것입니다. –
@FaisalHafeez 좋은 제안입니다. 업데이트되었습니다. – GrandMasterFlush
나는 물러서서 왜 인터페이스가 있는지 묻습니다. 각 인터페이스를 구현하지만 객체가 아닌 공통 기본 클래스가없는 세 가지 클래스가 있습니까? –