![]() |
||||||||||||||||
1 | ||||||||||||||||
Класс Person для контактов. Какие свойства добавить в него можно (к существующим)?10.10.2011, 22:27. Показов 1930. Ответов 13
Метки нет Все метки)
(
Решил одну свою прогу полностью переписать по новой (опыта больше, старый код с косяками, решил по новой нормально сделать с большим функционалом).
Вот решил добавить контакты и думаю, какие данные вообще добавить помимо тех, что уже есть в классе? И стоит ли в класс пихать огромное кол-во свойств с данными о контакте, может есть другие подходы?
Я вот всё не могу решить, как сделать. Сделать свойства:
поле
(по сути данные в поле храняться, свойство это обёртка)
0
|
|
10.10.2011, 22:27 | |
Ответы с готовыми решениями:
13
Как можно в форму VBA вставить MSFlexGrid? какие у него есть свойства и методы?
Разработать класс Person для создания телефонного справочника Создать класс Person для ввода фамилии и имя человека |
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
|
|
10.10.2011, 23:02 | 2 |
Не по теме: В Windows есть стандартная адресная книга. Не по теме: Имхо, лучше класс заменить на структуру. Я бы еще добавил факс, электронную почту, аську, скайп, etc. Стоит так же заметить, что у некоторых их бывает несколько штук как и номеров мобильного телефона. А что мешает адрес сделать структурой, в которой хранить улицу, дом, etc. Как по мне, еще не хватает группы. Чтобы различать там "друзья", "родственники", "коллеги по работе", etc и предоставлять список в соответствии с этими группами.
0
|
![]() |
|||||||||||
10.10.2011, 23:42 [ТС] | 3 | ||||||||||
Почему лучше?
Добавлено через 50 секунд Наверное лучше сделать в виде перечисления? Добавлено через 3 минуты Ок, это я добавлю. А вот насчёт etc
(и так далее)
Кстати эти все дополнительные данные может тоже организовать в виде структуры? Добавлено через 27 минут То есть лучше вообще массивы хранить чтоли? Вместо:
0
|
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
|
|
10.10.2011, 23:47 | 4 |
Различий очень много. Самые значимые то, что структура работает быстрее и съедает меньше ресурсов. (Не буду вникать в дерби о хранении в памяти и другой ереси)
Да, если не предусмотрено добавление новых групп. Выигрыша никакого не будет, но с точки зрения архитектуры приложения, можно всю информацию разбить на логические части под какой-нибудь паттерн. Такой код далее будет просто масштабировать и отлаживать. Перечислил все, что пришло в голову. Та хранить можно и в одном string при желании, разделяя номера к примеру символом ";". Как считаете нужным, так и делайте - это же ваш проект.
0
|
![]() |
|||||||||||||||||||||
11.10.2011, 00:19 [ТС] | 5 | ||||||||||||||||||||
Вот именно, хочу спроектировать изначально нормально.
Вот пока пришёл к этому (у меня по мере написания постоянно что-то меняется, пока не приду к нужному результату): Person.cs
FullName.cs
И вот например благодаря использованию структуры не получается присвоить отдельно имя или фамилию таким образом:
Добавлено через 17 минут Да ну эти структуры, такой гемор только начинается, вот погляди хотя бы на это:
И что такой вариант реально чем-то ускоряет работу? Ведь по тысяче раз придётся создавать структуру, чтобы поменять имя или фамилию только. Вообще плюсов не вижу.
0
|
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
|
||||||
11.10.2011, 00:24 | 6 | |||||
Присвоить полностью всю структуру
Вот такой код нормально работает:
Стоит подумать о "а оно надо так делать?". Так как меняется же все в одной мастер-форме (в моем понимании после нажатия на кнопку "редактировать" или "добавить"). То есть достаточно добавить один метод, который принимал бы все нужные структуры. И оставить только нужные свойства, которые бы возвращали не структуры, а родные типы как string, int и тому подобное, через структуры. Инкапсуляция же не зря придумана: написать методы, которые бы представляли данные в нужной форме. P.S. Это все полет мысли, а на этом не настаиваю. Да и база контактов у вас маленькая - преимущества слишком крошечные. Да, недавно тестировал классы в C# для замера времени на примере умножения двух очень больших матриц. Реализовал два разных типа для хранения значений в матрице: через структуру и через класс, сокрыт в обоих случаях внутри был обычный int. У меня выигрыш был в 7 раз - это не сильно заморачиваясь.
0
|
19 / 19 / 1
Регистрация: 28.02.2011
Сообщений: 72
|
|
11.10.2011, 03:14 | 8 |
Раз уж Вы определили свойства в структуре, зачем саму структуру запихивать в свойство? Определите Name как public (internal) поле.
А строка p.Name.FirstName = "Чудик"; не имеет смысла, ведь Name это свойство ,а свойства раскрываются в методы. Рихтер по этому поводу правильно пишет: Лично мне свойства не нравятся, и я был бы рад, если бы их поддержку убрали из Microsoft .NET Framework и сопутствующих языков программирования. Причина в том, что свойства выглядят как поля, на самом деле являясь методами. Это по рождает массу заблуждений и непонимания. Столкнувшись с кодом, обращающимся к полю, разработчик привычно предполагает наличие массы условий, которые просто не всегда верны, если речь идет о свойстве. ПС: если структура является полем класса, она всё равно размещается в куче, и никакого выигрыша в производительности ожидать не стоит...
0
|
![]() |
|
11.10.2011, 06:59 [ТС] | 9 |
Ну тогда тем более, удобств никаких, только гемор появляется. Ну в общем я уже сделал классами.
А то есть сделать открытое поле, это же типа нарушение инкапсуляции? Я вообще нагуглил, что структуру следует использовать для небольших типов данных. Ну незнаю, я вообще привык к этим свойствам, что их отсутствие в С++ у меня сначала вызвало непонимание и показалось жутко не удобным. Это не реально, они нужны для XAML как мимнимум и используются в привязке данных. То есть именно из-за XAML все объекты имеют огромное кол-во свойств. По крайней мере так пишут в книге по WPF. А что сложного и не понятного то, свойство возвращает ссылку на ссылочный тип (class) и возвращает новый экземпляр структуры, именно поэтому p.Name.FirstName = "Чудик"; не работает, так как мы присваиваем не конкретно свойству этой структуре, к которой якобы обращаемся на первый взгляд, а новому экземпляру возвращаемому свойством (ну я так понимаю).
0
|
![]() |
||||||
12.10.2011, 23:28 [ТС] | 10 | |||||
Вот что ещё можно добавить?
0
|
![]() 17216 / 12670 / 3321
Регистрация: 17.09.2011
Сообщений: 20,945
|
|
12.10.2011, 23:39 | 11 |
У меня, например, два мобильника с разными номерами.
Как информация обо мне отображалась бы в вашей программе?
0
|
![]() |
|
12.10.2011, 23:45 [ТС] | 12 |
Я вот и хочу придумать, как всё это замутить бы получше. Хочу сразу по уму сделать. Ладно ещё можно скажем в массиве хранить номера мобил, в интерфейсе проги думаю сложнее будет придумывать, но прога на WPF будет, там возможно всё, главное разобраться.
Добавлено через 1 минуту Посоветуете может чего нибудь? Если хотите глянуть как инфа сейчас отображается в прошлой версии программы, то могу дать ссылку на неё, прога на этом форуме есть в теме бета теста. Но я буду делать не тупо дни рождения, как в первой версии, а контакты, короче попробую намутить что-нибудь покруче. Добавлено через 2 минуты Может каждое свойство сделать массивом или List<string>? второй вариант удобен, но походу затратен да? Добавлено через 1 минуту Это ещё пол беды, потом надо как-то в базу данных сохранять всё (Sql Server Compact Edition 3.5). Я о сохранении каждого контакта в таблицу, с кучей свойств массивов.
0
|
![]() |
|
13.10.2011, 03:03 [ТС] | 14 |
А чем лучше? Так то SQLite у меня есть библиотеки. В Sql Server Compact Edition 3.5 есть встроенная поддержка шифрования, в SQLite насколько помню с этим проблемы, что-то там самому компилировать надо и т.д. Не охота лезть в эту муть.
Добавлено через 1 минуту Народ, если шарите, подскажите по вопросам выше.
0
|
13.10.2011, 03:03 | |
Помогаю со студенческими работами здесь
14
В класс десятичный счетчик добавить Свойства и индексаторы Добавить свойства EOF и BOF в класс рекордсет Разработать класс Person, который содержит соответствующие члены для хранения.
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |