Работа с обобщённым классами и интерфейсами - 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)
- {
- //...
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д