Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 13:05   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Singletonitis

Я пишу вот такую программу.



Сейчас занимаюсь своим контролом с графикой на XNA. Иерархия визуальных элементов примерно такая (на скриншоте не все объекты):
Код:
Экраны
  Поля
    Легенда
    Шкала
    График
      Сетка
      Линии
  Временная шкала
  Панель индикаторов
    Индикаторы
Информацию об экране (сколько полей, сколько в каждом поле графиков, каких именно, и т. д.) нужно где-то хранить. При этом нужно:
1) обеспечить доступ всех объектов к этой информации. Например, цвет параметра нужно знать Линии, Легенде и Шкале.
2) держать её в одном месте для удобства сериализации
Поэтому я сделал класс ScreenOptions.

Было бы просто обойтись ссылками или указателями: передал созданному элементу ссылку на ScreenOptions, и тот обращается по мере необходимости. Только вот пишу я на шарпе, а там нет ни указателей, ни ссылок в обычном (сиплюсплюсовом) понимании.

Можно передавать необходимую информацию элементу, чтобы тот копировал её себе, но тогда придётся следить, чтобы при изменении информации каждый контрол её обновил.

Ещё одно решение (пока лучшее) - хранить настройки экранов в синглтоне. Но придётся хранить массив свойств экранов отдельно от самих экранов, а хотелось бы, чтобы экран содержал бы в себе свои свойства, дабы не нарушать инкапсуляцию. Да и вообще, по возможности стоит обходиться без синглтонов.
ds.Dante вне форума Ответить с цитированием
Старый 18.08.2011, 14:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
ни ссылок в обычном (сиплюсплюсовом) понимании.
1)есть
2)объекты по умолчанию передаются по ссылке.
соответственно хранящийся у вас объект класса ScreenOptions не будет копироватся просто так.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.08.2011, 14:05   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Две ссылки не могут указывать на один объект (кроме аргументов с ref).

По умолчанию при передаче объект копируется.
ds.Dante вне форума Ответить с цитированием
Старый 18.08.2011, 15:41   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
using System.Collections.Generic;

class A
{
	static void Fill(List<int> b)
	{
		b.Add(5);
		b.Add(6);
	}
	static void Fill2(List<int> b)
	{
		List<int> t=b;
		t.Add(7);
		t.Add(8);
	}
	static int Main(string[] args)
	{
		List<int> l=new List<int>();
		Fill(l);
		Fill2(l);
		foreach(int i in l)
		{
			System.Console.WriteLine(i);
		}
		return 0;
	}
}
тогда почему это работает?
(вывод 5,6,7,8)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.08.2011, 16:28   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Не знаю. Вчера не работало. Честно. :)


Ничего, бывает... :)

Последний раз редактировалось ds.Dante; 18.08.2011 в 16:37.
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц