Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 53
1

Как правильно организовать?

27.01.2019, 13:09. Просмотров 449. Ответов 2
Метки нет (Все метки)

У меня есть несколько классов и у них практически одинаковые функции, которые отличается парой типов, как мне правильно сделать базовые классы, что б не переписывать одно и тоже 100 раз а просто вызвать из базового класса.
Итак классы Record (я оставил только функции которые повторяются):
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
public class Record
{        
   // ????
}
 
public class AccountRecord : Record
    {
        public static DataTable GetAllRecords()
        {
            string query = "SELECT * FROM Accounts";
            return SQLqueries.selectQuery(query, new OleDbConnection(Settings.Default.ConnectString));
        }
 
        public bool ShowDialog()
        {
            FormAccountRecord form = new FormAccountRecord(this);
 
            if (form.ShowDialog() != DialogResult.OK)
            {
                return false;
            }
 
            this.Copy(form.AccountRecord);
 
            return true;
        }
    }
 
public class PupilRecord : Record
    {
        public static DataTable GetAllRecords()
        {
            string query = "SELECT * FROM Pupils";
            return SQLqueries.selectQuery(query, new OleDbConnection(Settings.Default.ConnectString));
        }
 
        public bool ShowDialog()
        {
            FormPupilRecord form = new FormPupilRecord(this);
 
            if (form.ShowDialog() != DialogResult.OK)
            {
                return false;
            }
 
            this.Copy(form.PupilRecord);
 
            return true;
        }
    }
И классы FormRecord (я оставил только функции которые повторяются):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class FormRecord : Form
{
   // ???
}
 
public class FormAccountRecord : FormRecord
{
    AccountRecord = new AccountRecord();
 
    FormAccountRecord(AccountRecord ar) { /*.......*/ } // суть в том что передаётся именно класс унаследованный от Record
}
 
public class FormPupilRecord : FormRecord
{
    PupilRecord = new PupilRecord();
 
    FormPupilRecord(PupilRecord ar) { /*.......*/ } // суть в том что передаётся именно класс унаследованный от Record
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.01.2019, 13:09
Ответы с готовыми решениями:

Как правильно организовать многопоточность?
Всем привет! Если кратко Мне нужно организовать выполнение одной большой не цикловой задачи в...

Как правильно организовать цикл for?
Имеем два числа, например 30 и 42 Нужно в цикле перебрать их например 3 раза по следующему...

Как правильно организовать исключение
Подскажите пожалуйста, как правильно организовать такое исключение: Создан массив, если в нем есть...

Как правильно организовать Unit Test?
Доброго времени суток. Никак не могу разобраться в этом тестировании, прошу вашей помощи. Есть...

2
320 / 300 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
27.01.2019, 13:57 2
C_programmer,
public static DataTable GetAllRecords()
Статические методы, к сожалению, не переопределяются. Так что с ними ничего не сделаешь. Ну или почти ничего.. Что до ShowDialog, то ее вполне можно поместить в родителя:

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 class Record
{        
    public virtual bool ShowDialog()
    {
        //дефолтная реализация
    }
}
 
public class AccountRecord : Record
    {
 
        publiс override bool ShowDialog()
        {
            FormAccountRecord form = new FormAccountRecord(this);
 
            if (form.ShowDialog() != DialogResult.OK)
            {
                return false;
            }
 
            this.Copy(form.AccountRecord);
 
            return true;
        }
    }
суть в том что передаётся именно класс унаследованный от Record
Почему бы и нет:
C#
1
FormAccountRecord(Record ar) { /*.......*/ }
А вообще вместо двух классов FormAccountRecord и FormPupilRecord проcится написать один класс-генерик FormRecord<T> ... where T : Record
0
0 / 0 / 0
Регистрация: 11.04.2018
Сообщений: 53
27.01.2019, 14:13  [ТС] 3
Насчёт формы, мне нужно ч тоб я мог юзать фцнкции переданного объекта а не базовые(перезагружённые)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.01.2019, 14:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как правильно организовать обновление приложения?
Дорогие киберфорумчане, подскажите пожалуйста наиболее эффективную технику обновления приложения...

Как правильно организовать Log в приложении?
Здравствуйте. Я хочу организовать в своем проекте логирование. Для этого набросал класс-логер....

Как правильно организовать многопоточное приложение?
Здравствуйте. У меня есть код части программы: int z = 0; if (z == 0) { z++;...

Как правильно организовать класс по работе с БД
Здравствуйте. У меня есть проект каталогизатора. Изначально писал основываясь на MSSQL CE. Потом...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.