Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
1

Правильно ли я пишу? Работа с интерфейсом и двумя классами с аналогичными методами

29.11.2014, 14:51. Показов 3581. Ответов 68
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ подскажите ли правильно я поступаю. У меня в задании по курсовой есть клиенты и обьекты у них есть добавление,удаление,поиск,редактирование и тдп. Я решил сделать интерфейс так как эти методы почти аналогичные
C#
1
2
3
4
5
6
        void add(object obj);
        void delete(object obj);
        void edit(int index, int indexparam, object info);
        object view(object obj);
        object viewall();
        object sort(int indexparam,object obj);
Вот как все в интерфейсе смотрится

а вот как в классе обьект
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        public void add(object realty)
        {
            realtys.Add((Realty)realty);
        }
 
        public void delete(object index)
        {
            realtys.RemoveAt((int)index-1);
        }
        public void edit(int index, int indexparam, object info)
        {
          int indexrealty = index -1;
          switch (indexparam)
          {
              case 1:
                  realtys[indexrealty].Name = (string)info;
                  break;
              case 2:
                  realtys[indexrealty].Vartist = (int)info;
                  break;
              case 3:
                  realtys[indexrealty].Mrozt = (string)info;
                  break;
 
          }
а вот в классе клиент
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        public void add(object client)
        {
            clients.Add((Client)client);
        }
        public void delete(object npassport)
        {
           clients.Remove(clients.Find(x => x.Npassport == (int)npassport));
        }
        public void edit(int npassport, int indexparam , object info)
        {
          int indexclient =  clients.FindIndex(x => x.Npassport == (int)npassport);
          switch (indexparam)
          {
              case 1:
                  clients[indexclient].Name = (string)info;
                  break;
              case 2:
                  clients[indexclient].Surname = (string)info;
                  break;
              case 3:
                  clients[indexclient].Npassport = (int)info;
                  break;
              case 4:
                  clients[indexclient].Adres = (string)info;
                  break;
              case 5:
                  clients[indexclient].Telefon = (int)info;
                  break;
              case 6:
                  clients[indexclient].Nombank = (int)info;
                  break;
              case 7:
                  clients[indexclient].Tipneruh = (string)info;
                  break;
              case 8:
                  clients[indexclient].Vcena = (int)info;
                  break;
          }
        }
Вопрос ли не крыво я делаю. Может не стоит все через интерфейс завязывать) Думаю будет страдать понимаемость что в том методе должно хранится)
Елементарные операции хранить в интерфейсе было написано в задании) Я как начал так и все вышло обобщить и кинуть в интерфейс))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2014, 14:51
Ответы с готовыми решениями:

Работа с классами и методами
Доброго времени суток. У меня вот в чем вопрос. Есть 2 класса, Program и MyArray Часть кода...

Работа с классами и их методами.
Есть класс numerals, состоящий из двух дробных чисел. Среди методов - сложение, вычитание, деление...

Работа с методами и классами
Доброго времени суток, почему-то не работает код: (чтобы было понятнее, то вот задание) Создать...

Работа с классами и методами
Привет, кто подскажет правильно ли передаю координаты вектора для получения его длины? (файлы...

68
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
29.11.2014, 14:59 2
Lynatik001, а напишите полностью текст задания и полностью ваш код.
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 15:11  [ТС] 3
Цитата Сообщение от insite2012 Посмотреть сообщение
Lynatik001, а напишите полностью текст задания и полностью ваш код.
а Этого разве нахватает?
Это ж курсовая она болшая и много левого, я показал только то что надо что бы спросить ли норм написание вот такого кода).
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
29.11.2014, 15:13 4
Цитата Сообщение от Lynatik001 Посмотреть сообщение
ли норм написание вот такого кода
Первый вопрос, который у меня возник: почему не используете Generic-и....
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 15:15  [ТС] 5
Вот просто один с пунктов задания) о котором я говорил
4. Описать элементарные операции с данными, используя интерфейсы и абстрактные классы (стандартные, например, IComparer, и собственные) **.

Добавлено через 1 минуту
Цитата Сообщение от insite2012 Посмотреть сообщение
Первый вопрос, который у меня возник: почему не используете Generic-и....
типа view<Client> ?
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
29.11.2014, 15:17 6
Цитата Сообщение от Lynatik001 Посмотреть сообщение
типа view<Client> ?
типа class<T>, Method<T>
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 15:22  [ТС] 7
Ну как видите мы тут работаем с 2 списками клиент и обьект))


C#
1
2
3
4
        public object view(object npassport)
        {
            return clients.Find(x => x.Npassport == (int)npassport);
        }
C#
1
2
3
4
        public object view(object index)
        {
            return realtys[(int)index-1];
        }
Где же лучше описать шаблонный метод заместь object
Он весьма удобен в плане если у нас метод допустим поиск используется для поиска по разному критерию например ли то инт ли то строка
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
29.11.2014, 15:26 8
Цитата Сообщение от Lynatik001 Посмотреть сообщение
мы тут работаем с 2 списками клиент и обьект))
Я, к примеру, вижу только два метода и никаких списков (лопни мои глаза, что я проглядел ).
Именно поэтому я просил весь код, что относится к вопросу, а не кусочки. Нет желания гадать, что у вас там в коде и как.
1
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 15:28  [ТС] 9
Цитата Сообщение от insite2012 Посмотреть сообщение
типа class<T>, Method<T>
Но я же не буду обьеденять все в один класс, можно описать конечно абстракный<T> и от него наследоаваться. Сначало я так и решил. Правда остановился, забыл почему)) но помню что-то не выходило совмещать ирешил в интерфейсе писать)

Добавлено через 1 минуту
Цитата Сообщение от insite2012 Посмотреть сообщение
Я, к примеру, вижу только два метода и никаких списков (лопни мои глаза, что я проглядел ).
Именно поэтому я просил весь код, что относится к вопросу, а не кусочки. Нет желания гадать, что у вас там в коде и как.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
class ClientManipulation : Manipulation
    {
        List<Client> clients = new List<Client>();
        public void add(object client)
        {
            clients.Add((Client)client);
        }
        public void delete(object npassport)
        {
           clients.Remove(clients.Find(x => x.Npassport == (int)npassport));
        }
        public void edit(int npassport, int indexparam , object info)
        {
          int indexclient =  clients.FindIndex(x => x.Npassport == (int)npassport);
          switch (indexparam)
          {
              case 1:
                  clients[indexclient].Name = (string)info;
                  break;
              case 2:
                  clients[indexclient].Surname = (string)info;
                  break;
              case 3:
                  clients[indexclient].Npassport = (int)info;
                  break;
              case 4:
                  clients[indexclient].Adres = (string)info;
                  break;
              case 5:
                  clients[indexclient].Telefon = (int)info;
                  break;
              case 6:
                  clients[indexclient].Nombank = (int)info;
                  break;
              case 7:
                  clients[indexclient].Tipneruh = (string)info;
                  break;
              case 8:
                  clients[indexclient].Vcena = (int)info;
                  break;
          }
        }
 
        public object view(object npassport)
        {
            return clients.Find(x => x.Npassport == (int)npassport);
        }
        public object viewall()
        {
            return clients;
        }
        public object sort(int indexparam,object obj)
        {
            List<Client> sortclients = new List<Client>();
            switch(indexparam)
            {
                case 1:
                    sortclients = clients.FindAll(x => x.Name == (string)obj);
                    break;
                case 2:
                    sortclients = clients.FindAll(x => x.Surname == (string)obj);
                    break;
                case 3:
                     Regex regex = new Regex(@"^" + (int)obj + "");
 
                     sortclients = clients.FindAll((x) =>                         x.Nombank.ToString() != ""
                    
                    );
                    break;
 
            }
            return sortclients;
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace cursova6
{
    class RealtyManipulation : Manipulation
    {
        List<Realty> realtys = new List<Realty>();
        public void add(object realty)
        {
            realtys.Add((Realty)realty);
        }
 
        public void delete(object index)
        {
            realtys.RemoveAt((int)index-1);
        }
        public void edit(int index, int indexparam, object info)
        {
          int indexrealty = index -1;
          switch (indexparam)
          {
              case 1:
                  realtys[indexrealty].Name = (string)info;
                  break;
              case 2:
                  realtys[indexrealty].Vartist = (int)info;
                  break;
              case 3:
                  realtys[indexrealty].Mrozt = (string)info;
                  break;
 
          }
        }
        public object view(object index)
        {
            return realtys[(int)index-1];
        }
 
        public object viewall()
        {
            return realtys;
        }
        
    }
}
Он еще в режиме писания) сорта нету во 2ром))
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
29.11.2014, 15:30 10
Реально, дядя, сделай дженериком хотя бы интерфейс.. А то вообще по-конченому выглядит постоянное приведение.)

Добавлено через 1 минуту
Цитата Сообщение от Lynatik001 Посмотреть сообщение
Но я же не буду обьеденять все в один класс
у меня сложилось впечатление, что ты не знаешь, что такое дженерики.

Сделай интерфейс дженериком и при его реализации ты избавишься от постоянного приведения.
1
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 15:42  [ТС] 11
Цитата Сообщение от Anderok Посмотреть сообщение
Реально, дядя, сделай дженериком хотя бы интерфейс.. А то вообще по-конченому выглядит постоянное приведение.)
У меня постоянны приведения только из-за разности типов параметров.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public void edit(int index, int indexparam, object info)
        {
          int indexrealty = index -1;
          switch (indexparam)
          {
              case 1:
                  realtys[indexrealty].Name = (string)info;
                  break;
              case 2:
                  realtys[indexrealty].Vartist = (int)info;
                  break;
              case 3:
                  realtys[indexrealty].Mrozt = (string)info;
                  break;
 
          }
Пример, у меня тут вмещает редактирование всех параметров метод.
аналогом бы был
public void edit<T>(int index, int indexparam, T info)
C#
1
2
3
              case 1:
                  realtys[indexrealty].Name = info;
                  break;
и потом прийдется писать что то типа
C#
1
2
3
4
if(i==1)
edit<int>(1,1,1)
if(i==2)
edit<string>(1,1,"lkj")
неоч выглядит как то)
Заместь того что бы раз его вызвать)
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
29.11.2014, 15:47 12
Lynatik001, так я предлагаю сам интерфейс сделать дженериком, а не каждый метод в отдельности...
<> придётся написать только два раза - при реализациях его..
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 15:55  [ТС] 13
Цитата Сообщение от Anderok Посмотреть сообщение
Сделай интерфейс дженериком и при его реализации ты избавишься от постоянного приведения.
у меня не все методы возращают тот же список а некоторые возращают самых клиентов или обьектов- и они не будут совпадать с типом T

Добавлено через 5 минут
Цитата Сообщение от Anderok Посмотреть сообщение
Lynatik001, так я предлагаю сам интерфейс сделать дженериком, а не каждый метод в отдельности...
<> придётся написать только два раза - при реализациях его..
ну да вы правы по отношению к 2ум методам ето будет правильно. Но всеровно многого не поменяется) Спасибо за критику
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
29.11.2014, 15:55 14
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void Main()
{
    var a = new A();
    int i = 14;
    a.Edit(ref i);
    
    Console.WriteLine(i);
}
 
 
public class A: Interface<int> 
{
    public void Edit(ref int item)
    {
        item = 0;
    }
    public string GetStringView(int[] itemArray)
    {
        var sb = new StringBuilder();
        foreach(var x in itemArray)
        {
            sb.Append(x.ToString());
            sb.Append(' ');
        }
        return sb.ToString();
    }
}
 
public interface Interface<T>
{
    void Edit(ref T item);
    string GetStringView(T[] itemArray);
    // и так далее
}
 
// Define other methods and classes here
0
Эксперт .NET
5534 / 4298 / 1217
Регистрация: 12.10.2013
Сообщений: 12,332
Записей в блоге: 2
29.11.2014, 15:56 15
Lynatik001, я (значение частоты) так и не пойму что надо, и было бы проще, если бы вы озвучили задание. Но примерный набросок как-то так....
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2 {
    class Program {
        static void Main(string[] args) {
        }
    }
    interface Manipulation<T> {
        void Add(T arg);
        void Delete(T arg);
        T view(T arg);
    }
    class ObjectManipulation<T> : Manipulation<T> where T : class {
        List<T> list = new List<T>();
 
        public void Add(T arg) {
            list.Add(arg);
        }
 
        public void Delete(T arg) {
            
        }
 
        public T view(T arg) {
            
        }
    }
}
1
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
29.11.2014, 15:57 16
Lynatik001, во-первых, дженерик может может быть от более чем одного типа.. X<T,K>

А во-вторых не обязательно все методы сносить в интерфейс... Вообще говоря, интерфейсы - инструмент инкапсуляции, а если её не будет, то может стоит задуматься о необходимости применения интерфейса в целом?)
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 15:59  [ТС] 17
Если вы про метод
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        public void edit(int npassport, int indexparam , object info)
        {
          int indexclient =  clients.FindIndex(x => x.Npassport == (int)npassport);
          switch (indexparam)
          {
              case 1:
                  clients[indexclient].Name = (string)info;
                  break;
              case 2:
                  clients[indexclient].Surname = (string)info;
                  break;
              case 3:
                  clients[indexclient].Npassport = (int)info;
                  break;
              case 4:
                  clients[indexclient].Adres = (string)info;
                  break;
              case 5:
                  clients[indexclient].Telefon = (int)info;
                  break;
              case 6:
                  clients[indexclient].Nombank = (int)info;
                  break;
              case 7:
                  clients[indexclient].Tipneruh = (string)info;
                  break;
              case 8:
                  clients[indexclient].Vcena = (int)info;
                  break;
          }
То он содержит не один какой то тип что бы косить его под T как в примере)
то же и в других методах)) Разве что для тех 2ух методов там где именно возращение списков идет)
Но самому етому методу он не поможет)
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
29.11.2014, 16:04 18
Lynatik001, а ё-моё... у тебя метод разные типы суёт??? Жесть..

Так примени dynamic ))

Добавлено через 2 минуты
Lynatik001, а, нет ... погоди... ё-моё.. У тебя есть массив object? жесть[2].. Блин, ладно, тогда помолчу.
0
47 / 39 / 15
Регистрация: 28.09.2012
Сообщений: 818
29.11.2014, 16:05  [ТС] 19
Цитата Сообщение от insite2012 Посмотреть сообщение
набросок как-то так...
Ну в добавлении удалении да у меня обьект в параметрах, в удалении в параметрах индекс а не Т-обьект
ввобщем тут все же не пихнешь в Т тут же разные типы везде в параметрах типа инт стринг или же обьект может быть а не именно тот один что надо
0
116 / 116 / 70
Регистрация: 10.11.2013
Сообщений: 445
29.11.2014, 16:06 20
Lynatik001, стоп, массив объектов, в которые ты что-то суёшь? Ты зря сделал один метод на всё это... Мог бы воспользоваться инструментом перегрузки методов и делать то, что тебе надо.. А так это антипаттерн какой-то...
0
29.11.2014, 16:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2014, 16:06
Помогаю со студенческими работами здесь

Работа с классами и методами
Добрый день. Прошу не оставаться равнодушными !)) Помогите пожалуйста написать методы. Само задание...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru