Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Заблокирован

Конструктор класса или специальный метод созодания экземпляра класса?

12.10.2020, 13:46. Показов 672. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли сформулировать критерии, по которым имеет смысл делать выбор способа создания экземпляра класса - конструктор класса или специальный метод создания экземпляра класса (внутри метода, конечно, будет использоваться конструктор)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2020, 13:46
Ответы с готовыми решениями:

Создать экземпляр метода класса или доступ к методу из экземпляра класса
Всем доброго времени суток!) Уже месяца как 2 не сишарпил и подзабыл...собственно задача такая: Создать отдельный экземпляр класса для...

Пример класса с конструктором и деструктором, создание экземпляра класса через конструктор с параметрами
Привести пример класса с конструктором и деструктором, созданием экземпляра класса с помощью конструктора с параметрами.

Чем отличается конструктор класса от экземпляра класса?
Чем отличается конструктор класса от экземпляра класса?

13
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
12.10.2020, 13:56
вот как лид скажет, так и будет
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
12.10.2020, 13:57
Вы про инверсию зависимостей ?
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
12.10.2020, 14:16
titan4ik, это все диктуется здравым смыслом.
Если наиболее детальная перегрузка принимает 3 параметра, но в большинстве сценариев варьируется только один из них, то имеет смысл создать фабричный метод под этот параметр. Это, по сути, просто DRY principle.
Либо когда хочешь отделить штатные состояния от исключительных ситуаций.
Типа того:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class OperationResult 
{  
   
   public OperationResult(List<string> errors) {
           Errors = errors ?? new List<string>();  
  }
 
   public List<string> Errors {get;}
 
   public bool Succeeded {get;} => !Errors.Any();
 
   public static OperationResult FromException(Exception exception) {
           var errors = // правильно собрать текст сообщения, либо просто exception.ToString()  - для начала
           return new OperationResult(errors);           
   }
   public static OperationResult Succeeded => new OperationResult(null);
}
1
Заблокирован
12.10.2020, 14:19  [ТС]
Цитата Сообщение от Почтальон Посмотреть сообщение
Вы про инверсию зависимостей ?
Да чёрт его знает про что) Может и про это тоже)
Я про себя - переделываю в очередной раз свою программку и пытаюсь понять как ее упростить. Нашел такие методы создания экземпляров у себя. Вот, решил задать вопрос в общем виде.
Про инверсию зависимостей я читал и восхищался даже этим приемом, помнится для этого используются интерфейсы. Но сам вроде осознанно не применял инверсию зависимостей) А методы такие у себя обнаружил - нужно разбираться теперь. Вспомнил, это были методы создания экземпляра тоже по общему интерфейсу, а потом при исполнении им соответствовали объекты разных типов, которые унаследованы от этого интерфейса. Вроде примерно так.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
12.10.2020, 14:22
Акцент на чистокод когнитивное восприятие - очень облегчает построение больших систем.
Не замечали как именуются типы в FCL? Parse, TryParse, blah blah blah..
1
Заблокирован
12.10.2020, 14:33  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Если наиболее детальная перегрузка принимает 3 параметра, но в большинстве сценариев варьируется только один из них, то имеет смысл создать фабричный метод под этот параметр.
Понятно. И так делал. Вспомнил. Фух)
Почтальон, IamRain, спасибо!)

Добавлено через 5 минут
Ааа вот теперь вспомнил,
я ещё использовал такие методы, когда изначально не понятно экземпляр какого именно типа нужно создать будет. И в зависимости от параметров логика решала какой конструктор применить. Вот это точно было.
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
12.10.2020, 15:12
Цитата Сообщение от titan4ik Посмотреть сообщение
Ааа вот теперь вспомнил,
я ещё использовал такие методы, когда изначально не понятно экземпляр какого именно типа нужно создать будет. И в зависимости от параметров логика решала какой конструктор применить. Вот это точно было.
А ещё может быть сценарий, когда из одного класса нужно получить другой, возможно, с напалением какой-то логики. Смапить, скажем так. Вместо того, чтобы принимать ссылку на такой объект в конструкторе, можно завести отдельный класс, который выполнит такое проецирование. При этом, между проецируемыми классами не возникнет связи.
3
Заблокирован
12.10.2020, 15:15  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
А ещё может быть сценарий
Спасибо, хорошая идея!
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.10.2020, 15:37
Цитата Сообщение от titan4ik Посмотреть сообщение
Можно ли сформулировать критерии, по которым имеет смысл делать выбор способа создания экземпляра класса - конструктор класса или специальный метод создания экземпляра класса (внутри метода, конечно, будет использоваться конструктор)?
1. Когда конкретный тип создаваемого объекта неизвестен
2. Когда создание экземпляра требует аргументов, которых у вас нет на момент его создания
3. Когда вам нужен просто экземпляр, но не обязательно новый — см. кеширование
4. Когда создание экземпляра включает дополнительный код кроме вызова конструктора: всякие проверки, например
...
100500. И т.д. и т.п.
3
Заблокирован
12.10.2020, 15:44  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
2. Когда создание экземпляра требует аргументов, которых у вас нет на момент его создания
В этом случае метод создания вставляет на место отсутствующих аргументов некие стандартные (или тут же вычисляемые) значения параметров?
0
Эксперт .NET
 Аватар для Usaga
14313 / 9393 / 1355
Регистрация: 21.01.2016
Сообщений: 35,424
12.10.2020, 15:46
Цитата Сообщение от titan4ik Посмотреть сообщение
В этом случае метод создания вставляет на место отсутствующих аргументов некие стандартные (или тут же вычисляемые) значения параметров?
Не обязательно. Может быть лезет за значениями в условную базу данных. Или получает их заранее, при создании фабрики. Этакое каррирование.
3
Заблокирован
12.10.2020, 15:47  [ТС]
Да, понятно, затмение проходит)
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
14.10.2020, 15:08
titan4ik, вот вам еще пример в копилку: Передача значения из конструктора производного класса в конструктор базового

Товарищу нужно в конструктор базового класса передать ссылку на объект, который инициализируется в производном классе.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2020, 15:08
Помогаю со студенческими работами здесь

Как создать атрибут экземпляра класса в методе экземпляра класса?
Здравствуйте. Подскажите, как в javascript создать новый атрибут экземпляра класса в методе экземпляра? class YandexMap{ //...

Не могу передать параметр в родительский конструктор при создании экземпляра класса
Хочу создать экземпляр класса Human, и передать в конструктор его родительского класса параметр size . Для этого вызываю в классе Human...

Передача экземпляра класса в метод
Всем привет случайно столкнулся с данной проблемой. Есть простой класс public class Test { public int...

Создание экземпляра класса, разрушение экземпляра класса
Не могу найти информацию про разрущение экземпляра класса. Объясните пожалуйста, что это?

Универсальный метод добавления экземпляра класса
Добрый день! Есть несколько классов, основными полями в которых являются Id и Description. Могут быть и другие, но не быть этих не может....


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru