Работа с обобщённым классами и интерфейсами - C#
Формулировка задачи:
Добрый день.
Народ, у кого есть время, помогите, мне кажется я запутался в элементарных вещах.
Вообщем задача такова.
(Описание задачи в кратце)
Есть три файла разных форматов, количество форматов может увеличится, xml, xls, dbf.
Информацию из файлов необходимо вывести в dataGrid на экран.
Пока я сделал вот что:
1) Создал интерфейсы для классов моделей (Под классами моделей я подразумеваю классы объекты которых будут принимать в себя данные из файлов. Надеюсь я правильно их называю «Классы модели»? )
2) Создал интерфейс метод которого будет читать файл, какого нибудь формата.
3) Создал классы реализующие интерфейсы моделей
4) А вот тут напал тупняк..., а именно:
1. Не могу для себя решить правильно ли я сделал обобщённый интерфейс и обобщенно ограниченный класс? (Правильно говорить обобщенно ограниченный класс?) Может стоило наложить ограничение на сам интерфейс, а не на класс реализующий этот интерфейс?
2. public class ReadingFilesXML<T> : IReadingFiles<T> where T : IFIO, IregNum - Правильно я описал ограничение на интерфейс для класса. Чтобы класс мог использовать только те аргументы которые реализуют один из трёх интерфейсов IdeadMan, Iemployees, Ihuman?
Пока всё =)
P.S.
Побольше критики кода.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Создаём интерфейсы для моделей по SOLID (Принцип разделения интерфейсов)
//http://metanit.com/sharp/patterns/5.4.php
namespace DownloadAndShow.Interfaces.Models
{
//Интерфейс не реализуется
public interface IFIO
{
string Ifio { get; set; }
string Ffio { get; set; }
string Ofio { get; set; }
}
//Интерфейс не реализуется
public interface IRegNum
{
string RegNum { get; set; }
}
//Реализация:
// - DownloadAndShow.Models.Peopol
public interface IDeadMan : IFIO
{
string DateBirth { get; set; }
string DateDead { get; set; }
}
//Реализация:
// - DownloadAndShow.Models.Employees
public interface IEmployees : IRegNum
{
int NumberEmployees { get; set; }
int NumberNotWorking { get; set; }
int ChargedOPS { get; set; }
double SummaOPS { get; set; }
}
//Реализация:
// - DownloadAndShow.Models.Human
public interface IHuman : IFIO, IRegNum
{
string SNILS { get; set; }
}
}using DownloadAndShow.Interfaces.Models;
namespace DownloadAndShow.Models
{
//Модель для информации о мёртвом человеке из файла XML
class DeadMan : IDeadMan
{
public string Ifio { get; set; }
public string Ffio { get; set; }
public string Ofio { get; set; }
public string DateBirth { get; set; }
public string DateDead { get; set; }
public DeadMan(string ifio, string ffio, string ofio, string datedirth, string datedead)
{
Ifio = ifio; Ffio = ffio; Ofio = ofio; DateBirth = datedirth; DateDead = datedead;
}
}
//Модель для информации о сотрудниках в фирме из файла XLS
class Employees : IEmployees
{
public string RegNum { get; set; }
public int NumberEmployees { get; set; }
public int NumberNotWorking { get; set; }
public int ChargedOPS { get; set; }
public double SummaOPS { get; set; }
}
//Модель для информации о человеке из файла dbf
class Human : IHuman
{
public string Ifio { get; set; }
public string Ffio { get; set; }
public string Ofio { get; set; }
public string RegNum { get; set; }
public string SNILS { get; set; }
}
}using System.Collections.Generic;
namespace DownloadAndShow.Interfaces.ReadFiles
{
//Интерфейс с методом для чтения файлов
//Реализуется классами:
// - ReadingFilesXML
public interface IReadingFiles<T>
{
IList<T> ReadFile(string path, IList<T> FillableCollection);
}
}using DownloadAndShow.Interfaces.Models;
using DownloadAndShow.Interfaces.ReadFiles;
using System.Collections.Generic;
namespace DownloadAndShow.Classes.ReadingFiles
{
class ReadingFilesXML<T> : IReadingFiles<T> where T : IFIO, IRegNum
{
public IList<T> ReadFile(string path, IList<T> FillableCollection)
{
return FillableCollection;
}
}
}Решение задачи: «Работа с обобщённым классами и интерфейсами»
textual
Листинг программы
class DeadManReaderXML : IReadingFiles<DeadMan>
{
public void ReadFile(string path, IList<DeadMan> FillableCollection)
{
//...
}
}