Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
1 / 1 / 2
Регистрация: 12.06.2015
Сообщений: 52

Классы в C#

28.07.2015, 23:55. Показов 2028. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, ребят, подскажите пожалуйста как мне сначала передать из этого класса данные...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace Карточка_студента_3
{
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            //Application.EnableVisualStyles();
           // Application.SetCompatibleTextRenderingDefault(false);
           // Application.Run(new StudentCard());
            CreateFile createPatch = new CreateFile();
            createPatch.Family = "Иванов";
            createPatch.Name = "Иван";
            createPatch.Group = "1-я группа";
           
            
        }
    }
}
...в этот класс и только потом обработать их в методе CreatePatch
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
namespace Карточка_студента_3
{
    class CreateFile
    {
        private string newFilePatch;
        private string family;
        private string name;
        private string group;
 
        const string slash = "\\";
 
        public string Family
        {
            set
            {
                family = value;
            }
            get
            {
                return family;
            }
        }
 
        public string Name
        {
            set
            {
                name = value;
            }
            get
            {
                return name;
            }
        }
        public string Group
        {
            set
            {
                group = value;
            }
            get
            {
                return group;
            }
        }
        
        
        public CreateFile()
        {
            
            CreatePatch(Family, Name, Group);
        
        }
 
        private void CreatePatch(string family, string name, string group)
        {
            newFilePatch = family + slash + name + slash + group;
            MessageBox.Show(newFilePatch);
        }
 
        private void CreateNewFile()
        {
            
        }
   
    }
}
Может использование свойств здесь лишнее. Может нужно просто сделать метод CreatePatch public и сразу обращаться к нему из другого класса? Подскажите пожалуйста как правильнее.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.07.2015, 23:55
Ответы с готовыми решениями:

Непонятна тема (Классы содержащие другие классы, как данные члены )
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include &lt;iostream&gt; class Point { public: void...

Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo
Уважаемые форумчане помогите пожалуйста с практической работой. Программным путем: В папке С:\temp создайте папки К1 и К2. В...

Определить классы абстрактного выражения и классы для различных типов выражений
помогите Реализовать объектно-ориентированную модель, определяет математическое выражение, представлен в виде дерева. Определить классы...

31
1 / 1 / 2
Регистрация: 12.06.2015
Сообщений: 52
17.08.2015, 13:20  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от tvv1 Посмотреть сообщение
самому что то пытаться делать, а не ждать готового решения со стороны.
Я Вас понимаю, со стороны это выглядит именно так, но уж поверьте это не так. Просто когда человеку объясняют на примере его же небольшой части программы человек получает бесценный опыт, это очень хорошо откладывается в голове.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.08.2015, 13:22
Progr_mmer, на самом деле обычно хорошей практикой считается иметь не более 4, реже не более 6 параметров в конструкторе. Больше - надо уже как-то группировать.
0
 Аватар для tarasalk
1992 / 1216 / 440
Регистрация: 13.06.2013
Сообщений: 4,115
17.08.2015, 14:26
Цитата Сообщение от Progr_mmer Посмотреть сообщение
Ну так ведь в моем классе StudentData выполняется как раз таки генерация пути и запись в файл. Разве не так?
Так. И как по мне запись в файл это отдельная сущность.
Вот допустим у вас появится еще один подобный класс и вам опять надо будет сохранить все в файл. Вы будете дублировать методы для работы файлами в каждом подобном классе? Ну допустим продублируете, а потом вдруг понадобиться все это логировать, будете бегать по всем классам добавлять логирование?

Вообще, если мне нужно было бы работать с таким классом, я бы получил кучу проблем:
1) конструктора нет, поди угадай какие параметры нужно прописать и что будет если я не пропишу нужный параметр.
2) никакой обработки ошибок. Если файл не сохранится, я узнаю об этом разве что получив exception.
3) Нелогичные методы. Беру DeleteFile, ожидаю удаления файла, который как то связан конкретно с объектом класса StudentData, ведь именно в нем находится этот метод. Но получаю просто удаления файла по указанному пути.

В общем любой шаг в сторону от алгоритма, который хранится только у вас в башке...и все сломается. Имхо, с таким подходом только лабы писать.
0
1 / 1 / 2
Регистрация: 12.06.2015
Сообщений: 52
17.08.2015, 15:30  [ТС]
Цитата Сообщение от tarasalk Посмотреть сообщение
Но получаю просто удаления файла по указанному пути.
Путь будет указывать на файл, который создан объектом класса StudentData
Цитата Сообщение от tarasalk Посмотреть сообщение
никакой обработки ошибок.
Обработка ошибок опущена для облегчения восприятия, т.к никаких проблем с обработкой не возникает.

Добавлено через 9 минут
Цитата Сообщение от tarasalk Посмотреть сообщение
Имхо, с таким подходом только лабы писать.
С чего-то ведь надо начинать..))
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.08.2015, 15:32
Цитата Сообщение от Progr_mmer Посмотреть сообщение
Путь будет указывать на файл, который создан объектом класса StudentData
А если будет другой путь? Например system32/calc.exe, что тогда программа должна будет делать?
0
1 / 1 / 2
Регистрация: 12.06.2015
Сообщений: 52
17.08.2015, 16:06  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
А если будет другой путь? Например system32/calc.exe, что тогда программа должна будет делать?
Подразумевается что др. пути не будет т.к на форме есть TreeView который отображает список файлов в указанной директории и при клике по одному из элементов списка (который нужно удалить), будет получен его путь и при вызове метода DeleteFile класса StudentData, передан ему(методу) для удаления файла по этому пути..
Вы это имели ввиду?...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.08.2015, 16:42
Progr_mmer, так я и знал, что будет формулировка "подразумевается", "да такого быть не может"... Еще как может. Я уже молчу, что вы вы можете открыть блокнот, зайти файл -> открыть, он вам выдаст например папку "Моих документов" со списком документов там. Ничуть не смущаясь, пишем "C:\Windows\System32\drivers\etc\hos ts" -> Enter. И что же произойдет? Система не будет говорить "вы не в той папке". Это просто способ удобно указывать мышкой пути, не более того. Никаокй фильтрации тут нет.

Ну так, программа не должна писаться в надежде, что пользователь (то есть другой программист или вы сами через полгода, когда позабудете что и где происходит) будет всё делать правильно. Скорее логично предположить, что он ВСЁ будет делать неправильно и не стоит ему давать возможности накосячить.

Ну а если проще, то принцип единой ответственности. Каждый класс должен выполнять одну задачу. У вас кроме этого класса хоть один есть, не считая автогенерированных Form1?
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
17.08.2015, 16:53
Progr_mmer,
уже не один пост вам пишут изучайте ООП. Это не то как код писать. Каждый раз возвращаемся к:
Цитата Сообщение от Psilon Посмотреть сообщение
Каждый класс должен выполнять одну задачу
а вы все думаете про пример какой то. Не может быть у человека расширения файла. Это просто логика.
и пока не будут осознаны принципы ООП ....
постоянно будет возвращаться разговор к
Цитата Сообщение от Psilon Посмотреть сообщение
Каждый класс должен выполнять одну задачу
а вы так и дальше не будете понимать что вам говорят.
0
1 / 1 / 2
Регистрация: 12.06.2015
Сообщений: 52
17.08.2015, 18:26  [ТС]
Цитата Сообщение от tvv1 Посмотреть сообщение
уже не один пост вам пишут изучайте ООП
Цитата Сообщение от Psilon Посмотреть сообщение
Каждый класс должен выполнять одну задачу. У вас кроме этого класса хоть один есть, не считая автогенерированных Form1?
Классы конечно имеются еще 4.
Не могли бы Вы вместо того чтобы писать тонны текста, приводить примеры в теории, просто написать один МАААЛЕНЬКИЙ пример на основе моего. Про ООП я уже начитался этой теории. Принципы ООП я понимаю прекрасно. Но применить это практически пока не получаетсяю
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.08.2015, 19:59
Progr_mmer, ну если не усложнять чрезмерно, то примерно так можно:
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 Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
 
    public string Group { get; set; }
}
public interface IStudentRepository
{
    string UniquePath { get; }
    void Save(Student student);
    Student Load();
}
 
public class StudentRepository : IStudentRepository
{
    public string UniquePath { get; private set; }
    public StudentRepository(string path)
    {
        UniquePath = GetUniqueFileName(path);
    }
    
    public void Save(Student student)
    {
        using (var file = File.CreateText(UniquePath))
        {
            file.WriteLine(student.FirstName);
            file.WriteLine(student.LastName);
            file.WriteLine(student.Group);
        }
    }
 
    public Student Load()
    {
        using (var file = File.OpenText(UniquePath))
        {
            var student = new Student
                          {
                              FirstName = file.ReadLine(),
                              LastName = file.ReadLine(),
                              Group = file.ReadLine()
                          };
        }
    }
 
    public static string GetUniqueFileName(string root)
    {
        return Path.Combine(root, new Guid().ToString());
    }
}
Дальше можно оптимизировать, но это ужед альнейшие шаги.
1
1 / 1 / 2
Регистрация: 12.06.2015
Сообщений: 52
24.08.2015, 01:09  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
ну если не усложнять чрезмерно, то примерно так можно:
Спасибо огромное за пример. А как бы Вы организовали удаление файла с данными студента?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
25.08.2015, 17:01
Progr_mmer, Нужно добавить метод Remove в интерфейс и там уже этим заниматься. Факт в том, что в случае StudentRepository этот метод удаляет файл, а например в каком-нибудь StudentDbRepo он будет удалять запись из БД. Это уже остается на откуп конкретной реализации, тогда как интерфейс позволяет просто "уничтожить" объект, не заботясь о том, как он физически хранится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.08.2015, 17:01

Структуры данных, коллекции и классы-прототипы. Библиотечные классы коллекций
Ребят в чём ошибки? Нужно чтобы добавляло поля... которые я создал... далее вот продолжение самого задания Изменить приложение,...

Программа по классам, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы
Нужно написать программу, которая использует классы точек и прямых на плоскости, а, возможно, и другие классы. Реализовать её нужно в трех...

Проблема в понимании ООП(абстрактные классы, классы интерфейсы)
Всем здравия. Читал в свое время разные книги(к примеру, Гради Буч по проектированию) вроде все было понятно. Но тут с толкнулся с...

Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но через классы
Как struct Queue и его операции превратить в классы, то есть нужно сделать тоже самое, но используя соотвественно классы И как...

Наследование, базовые классы и производные классы
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru