Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
7 / 7 / 0
Регистрация: 05.04.2016
Сообщений: 410

Создание экземпляра объекта не вызывая конструктор

02.10.2019, 14:07. Показов 6677. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно как то создать экземпляр объекта динамического типа (типа, хранящегося в переменной типа Type), при этом не вызывая конструктор, но что бы базовые значения, прописанные в классе, присвоились, поясняю:
C#
1
2
3
4
5
6
7
8
9
public class SomeClass
{
    public string someStr = "abc";
    public int value { get; set; } = 2;
    public SomeClass(string str, SomeClass cl2)
    {
        someStr = "someActualValue";
    }
}
после (каким либо способом) создания экземпляра такого класса в объекте должны лежать someStr со значением "abc" и value со значением 2, Activator.CreateInstance не сработает, ибо он вызывает конструктор, а мне надо не вызывать (не от меня зависит какие будут конструкторы у потенциальных классов, все учесть невозможно, а создавать экземпляры надо), а FormatterServices.GetUninitializedObject не подойдёт, потому что в someStr будет null и в value 0, идеи?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.10.2019, 14:07
Ответы с готовыми решениями:

Передача имени класса и создание экземпляра соответствующего объекта
Добрый день! В моем приложении часто используется код: if (!Dialogs.connectedToDB()) return; ImportForm imvf...

Создание экземпляра объекта
Добрый день. Создал при помощи Эклипс класс: public class Car { public final static String color="красный"; ...

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

23
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
02.10.2019, 15:44
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nordicus666 Посмотреть сообщение
обязывать пользователя что то лишний раз делать без смысла для него - плохая идея
А игнорировать правила создания экземпляра класса, написанного пользователем, путем игнорирования вызова конструктора с параметрами — хорошая идея?
Пользователь ведь, наверное, конструктор с параметрами писал не просто так — значит правильное состояние объекта его типа зависит от передаваемых аргументов.
Обходя вызов конструктора, у вас по сути дела будут создаваться экземпляры классов с неопределенным поведением, т.к. объекты не будут инициализированы так, как задумал их автор.

Добавлено через 3 минуты
Что касается "Юнити так может", то быстрый гуглеж показал, что Юнити не поощряет инициализацию объекта в конструкторе — там для этого есть специально созданные методы в родительском MonoBehaviour. То есть создание своего конструктора в Юнити фактически Undefined Behavior.
Вы можете пойти по тому же пути: в правилах API прописать необходимость наличия дефолтного конструктора, а инициализацию производить в определенном методе (описанном в интерфейсе, например). Тогда авторам типов вообще ничего дополнительно делать не придется
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
02.10.2019, 15:47
Цитата Сообщение от Nordicus666 Посмотреть сообщение
Activator.CreateInstance не сработает, ибо он вызывает конструктор, а мне надо не вызывать (не от меня зависит какие будут конструкторы у потенциальных классов, все учесть невозможно, а создавать экземпляры надо)
Вы можете создать объект с произвольным конструктором используя Activator.CreateInstance, передав в конструктор параметры со значениями по умолчанию...
C#
1
2
3
4
5
6
7
8
9
    public class SomeClass
    {
        public string someStr = "abc";
        public int value { get; set; } = 2;
        public SomeClass(string str, SomeClass cl2)
        {
            someStr = "someActualValue";
        }
    }
C#
1
2
3
4
5
var ctor = typeof(SomeClass).GetConstructors()[0];
var ctorParams = ctor.GetParameters();
var ctorParamTypes = ctorParams.Select(cp => cp.ParameterType);
var x = ctorParamTypes.Select(cpt => cpt.IsValueType ? Activator.CreateInstance(cpt) : null).ToArray();
var obj = Activator.CreateInstance(typeof(SomeClass), x); // эквивалент var obj = new SomeClass(null, null);
0
 Аватар для jester
352 / 247 / 76
Регистрация: 18.03.2016
Сообщений: 979
02.10.2019, 15:54
я слышал что вся инициализация переменных в классе потом попадает в конструкторы. Это так?
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
02.10.2019, 15:58
Цитата Сообщение от jester Посмотреть сообщение
я слышал что вся инициализация переменных в классе потом попадает в конструкторы. Это так?
угу, до вызова конструктора базового класса. Так например ILSpy умеет отличать инициализаторы полей даже после компиляции
Цитата Сообщение от Nordicus666 Посмотреть сообщение
вот компонент, "constructor called" не выводит, при том когда нажимаешь единицу - выводит "someValue"
потому что вызывает пустой конструктор SomeClass() {} который судя по вашему коду юнити сама добавляет в исходник
If you do not define one the compiler will generate a default constructor for you.
http://ilkinulas.github.io/dev... uctor.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2019, 15:58

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

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

Конструктор и создание объекта в main
Уважаемые форумчане, помогите распутаться в 3-х соснах. Пожалуйста. Для наглядности, имеем код: import java.util.*; class...

Конструктор. Создание нового объекта
Всем привет, Пишу программу "Мой сборник CD". Как можно создавать объекты не вводя их количество в начале программы? Например, если...

Создание объекта и передача аргументов в конструктор
Всем привет, такой вопрос что делает следующая строчка : new NewClass(5); Прошу обратить внимание не вот этот код: NewClass obj = new...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Новости компьютерного мира и их обсуждение (4) Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru