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

Выделение памяти под объект в нужное время

31.10.2015, 18:57. Показов 3784. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задумался тут, а зачем нужно выделять память сразу под все объекты, которые будут использоваться, а не тогда когда это необходимо?
Например, вместо выделения памяти сразу:
C#
1
2
3
        private CFile _File = new CFile();
        private List<double> _Data = new List<double>();
        private StringBuilder _Sold = new StringBuilder();
Выделять ее тогда когда нужно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        private void Checking_Data(object _data, Type _type)
        {
            if (_data == null)
            {
                _data = System.Activator.CreateInstance(_type);
            }
        }
 
        private void загрузитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
              this.Checking_Data(_File, typeof(CFile));
        }
Метод Checking_Data работает, в _data выделяется память под нужный мне объект. Вот только я не знаю, как вернуть эту память обратно полю _File. Передавал как ref object _data и возвращаемое значение с void менял на object.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2015, 18:57
Ответы с готовыми решениями:

Выделение памяти под новый объект
Люди, посоветуйте, пожайлуста, как в уже созданный массив из N объектов добавить ещё один объект? Преподаватель сказал, что просто надо...

Динамическое выделение памяти под объект
Здравствуйте, меня интересует несколько вопросов по поводу конструкции new. Есть такой код: struct element { std::string...

Динамическое выделение памяти под объект класса
Помогите динамически выделить память под объект класса.

7
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
31.10.2015, 20:01
Лучший ответ Сообщение было отмечено Postal152 как решение

Решение

C#
1
2
3
4
5
6
7
8
9
private object Checking_Data(Type _type)
{
    return System.Activator.CreateInstance(_type);
}
 
private void загрузитьToolStripMenuItem_Click(object sender, EventArgs e)
{
      _File = (Cfile)Checking_Data(typeof(CFile));
}
только не понятно зачем такие извращения.

Можно же просто сделать

C#
1
2
3
4
5
6
7
8
9
class SomeClass
{
   private CFile _File;
 
   private void загрузитьToolStripMenuItem_Click(object sender, EventArgs e)
   {
        _File = new CFile();
   }
}
1
6 / 6 / 6
Регистрация: 02.01.2013
Сообщений: 32
31.10.2015, 20:11  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
C#
В вашем случаи каждый раз, когда я буду загружать данные в программу будет создаваться новый экземпляр класса. Зачем такие траты? А в мое случае я могу загружать данные, а могу ввести их вручную вот для этого и нужно вот такое извращение, дабы не выделять память под объект который может не использоваться.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
31.10.2015, 20:29
Цитата Сообщение от Postal152 Посмотреть сообщение
В вашем случаи каждый раз, когда я буду загружать данные в программу будет создаваться новый экземпляр класса. Зачем такие траты? А в мое случае я могу загружать данные, а могу ввести их вручную вот для этого и нужно вот такое извращение, дабы не выделять память под объект который может не использоваться.
Это такая большая проблема?
C#
1
2
3
4
5
private void загрузитьToolStripMenuItem_Click(object sender, EventArgs e)
{
     if (_File == null)
          _File = new CFile();
}
System.Activator.CreateInstance точно так же создает экземпляр класса как и этот код.
0
6 / 6 / 6
Регистрация: 02.01.2013
Сообщений: 32
31.10.2015, 20:40  [ТС]
Someone007, А если таких объектов например 10? Писать каждому такое лень, а тут хоть какая-то автоматизация процесса.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
31.10.2015, 20:54
Цитата Сообщение от Postal152 Посмотреть сообщение
какая-то автоматизация процесса
В чем же она заключается?

Добавлено через 11 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private CFile _File;
 
public T CreateObjectIfNull<T>(T obj) where T : new()
{
    if (obj == null)
        return new T();
 
    return obj;
}
 
private void загрузитьToolStripMenuItem_Click(object sender, EventArgs e)
{
    _File = CreateObjectIfNull(_File);
}
Но имхо все это бред.
0
6 / 6 / 6
Регистрация: 02.01.2013
Сообщений: 32
31.10.2015, 20:58  [ТС]
Someone007, хотя бы в том, что не нужно каждый раз писать что-то вроде этого
C#
1
2
3
4
if (_File == null)
{
    _File = new CFile();
}
Добавлено через 3 минуты
Someone007, может вы и правы, не все идеи бываю удачными)
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,569
31.10.2015, 21:04
Я бы просто написал
C#
1
_File = _File ?? new CFile();
в нужных местах и не забивал себе голову всяким бредом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.10.2015, 21:04
Помогаю со студенческими работами здесь

VBO. Выделение памяти под буферный объект
Есть некоторая программа, с занимаемой оперативной памятью (ОП) ~11 Мб. Далее в целях эксперимента беру высокополигональную модель...

FillRectangle, выделение памяти под объект Rectangle
Помогите, пожалуйста. Почему вот так не работает: Rectangle^ rect = gcnew Rectangle(20, 20, 200, 100); ...

Влияет ли конструктор на выделение памяти под объект?
Прочёл в книге Р.Лафоре &quot;Объектно-ориентированное программирование в С++:&quot; Подобно конструкторам, деструкторы не возвращают значения и...

Как работает динамическое выделение памяти под объект?
class A { public: A(int x){} ~A(){} }; const int n = 50; A* placementMemory = static_cast&lt;A*&gt;(operator new (n *...

Создание указателя на объект и выделение памяти
Не пойму почему при добавлении одного указателя выдает ошибку Этот код работает class A { public: class B { public: ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru