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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.06.2011, 16:01   #1
Roker
 
Регистрация: 18.12.2009
Сообщений: 8
По умолчанию Глобальная переменную(или её аналог) своего класса.

Мне нужна глобальная переменная своего созданного класса. Но как я понял в C# не существет глобальных переменнных, а только статические переменные и методы. Как мне такое сделать? код класса прилагается.
Код:
class World
	{
		public Square [,] MatrixStructOfWorld;
		public byte CoordinateX;//Координаты текущего положения экрана
		public byte CoordinateY;//Координаты текущего положения экрана
		public Bitmap WorldOfMonitor;
		public Bitmap Forest;
		public Bitmap Weed;
	public World()
		{ int x,y; 
		  CoordinateX=0;
		  CoordinateY=0;  
		  WorldOfMonitor=null;
		  Forest=new Bitmap(@"D:\Лес.png");
		  Weed=new Bitmap(@"D:\Трава.png");
		  MatrixStructOfWorld = new Square[100,100];
		  Random r=new Random();
		  for(x=0;x<99;x++)
		  {for(y=0;y<99;y++)
			{
			 MatrixStructOfWorld[x,y]=new Square(r.Next(0,2),r.Next(0,1));
	     	}
		  }
		}	
    public Bitmap MiniMap(int x, int y)
		{
			switch(MatrixStructOfWorld[x,y].PictureStruct)
			{		
			 case 0:return Weed; //break;
			 case 1:return Forest; //break;
			 case 2:return Forest;// break;
			 default:return null; 
			}		
		}//В зависимости от цифры в структуре находит нужное изображение	
    public Bitmap CreateWorldofMonitor(int x, int y)
		{int i,j,I,J; Bitmap map=new Bitmap(750,500), minimap=null;
		 for(i=0;i<15;i++)
		 {for(j=0;j<10;j++)
		  {// i и j координаты маленького участка 50*50
		   minimap=MiniMap(x+i,y+j);
		    for(I=0;I<50;I++)
		    {for(J=0;J<50;J++)
		     {
		      map.SetPixel(i*50+I,j*50+J,minimap.GetPixel(I,J));
		     }
		    }			
		  }
		 }
         return map;		 
		}//Возвращяет картинку, которая рисует карту на экране
    public byte CoordinateXB()
	{
	 return CoordinateX++;
	}
    public byte CoordinateXS()
	{
	 return CoordinateX--;
	}
    public byte CoordinateYB()
	{
	 return CoordinateY++;
	}
    public byte CoordinateYS()
	{
	 return CoordinateY--;
	}  
   }
Roker вне форума Ответить с цитированием
Старый 29.06.2011, 17:04   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

обьявите статическую переменную класса(видимость выберите сами)
если она сложная в инициализации(Одного конструктора мало), то напишите и свой статический конструктор.
Код:
class A
{
    public string B="фис";
}
или
Код:
class B
{
    public List<int> L=new List<int>();
    static B()
    {
         L.Add(5);
         L.Add(3);
    }
}
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.06.2011, 17:38   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Для сих целей можно использовать шаблон Одиночка
http://ru.wikipedia.org/wiki/Одиночк...B5.D0.BB.D1.8C
netrino вне форума Ответить с цитированием
Старый 29.06.2011, 19:13   #4
Roker
 
Регистрация: 18.12.2009
Сообщений: 8
По умолчанию

Так то и вся загвоздка, что у меня есть свой конструктор, а там в описании используют пустой конструктор(если я правильно понял). И в придачу пример который там используется для меня сложен, так как там используются большое количество не знакомых мне конструкций.
Roker вне форума Ответить с цитированием
Старый 29.06.2011, 20:10   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Конструктор можно не пустой использовать, но без параметров и он должен быть приватным. Впрочем, они (параметры) и не нужны, раз будет только один экземпляр.
Суть описанного на википедии примерно сводится к этому: http://ideone.com/LwXKn
А если воспользоваться их обобщённой реализацией, то всё упрощается до этого: http://ideone.com/Tek3u
То есть необходимо всего лишь отнаследоваться от класса Singleton и все дела)
В выводе можно заметить, что создание объекта и вызов конструктора происходят всего один раз.
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение листбокса из своего класса KobolD C# (си шарп) 3 26.04.2011 15:30
Непонятки с переопределением оператора << для своего класса DKOI Общие вопросы C/C++ 1 16.11.2010 00:40
Сохранение обьекта своего класса joker815 Помощь студентам 0 19.05.2010 17:59
Создание своего класса, наследование от предка Krechet Общие вопросы Delphi 16 02.05.2009 16:15
Создание своего класса AlexandrSid Общие вопросы Delphi 3 19.05.2008 13:28