Programming: C#


Учебник по C#
3.2 Переменные



  Источник:

Данные в C# хранятся в переменных соответствующего типа. C# является языком со строгой типизацией - значит, компилятор гарантирует, что переменная всегда имеет значение своего типа.

В C# определено 7 типов переменных: статические, экземплярные, элементы массивов. пераметры передаваемые по значению, выходные параметры и локальные переменные:

  • Статическими переменными являются поля класса, объявленные с ключевым словом static. Их значение является общим для всех экземпляров класса. Поясним сказанное на примере:
    using System;
    namespace StaticVariables
    {
      /// 
      /// Класс Singleton реализует шаблон Singleton (одиночка). 
      /// Этот шаблон позволяет ограничивать количество
      /// экземпляров класса одним и обеспечивает к нему доступ.  
      /// 
      /// 
      class Singleton
      {
        /// 
        /// Хранит единственный экземпляр класса
        /// 
        private static Singleton _instance;
        // Обеспечивает доступ к этому экземпляру
        public static Singleton Instance
        {
          get
          {
            // Если экземпляр не был создан, создаем его
            if (_instance == null)
              _instance = new Singleton();
            return _instance;
          }
        }
        /// 
        /// Объявляем конструктор закрытым, чтобы не допустить создание
        /// дополнительных экзепляров
        /// 
        private Singleton()
        {
        }
        /// 
        /// Стандартный hello, world!
        /// 
        public void HelloWorld()
        {
          Console.WriteLine("Hello, world");
        }
      }
      public class Application
      {
        public static void Main()
        {
          Singleton singleton = Singleton.Instance;
          singleton.HelloWorld();
        }
      }
    }

    В этом примере для доступа к статическому члену не нужно создавать экземпляра класса.

  • Экземплярные переменные - это поля класса, значения которых для каждого экземпляра индивидуальны.
    using System;
    namespace InstanceVariables
    {
      /// 
      /// Этот класс хранит имя мужчины
      /// 
      class Man
      {
        /// 
        /// Хранит обращение - общее для всех экземапляров
        /// 
        private static string _prefix = "Mr.";
        /// 
        /// Хранит имя каждого отдкльного мужчины
        /// 
        public string _name;
        /// 
        /// Создает мужчину с заданным именем
        /// 
        /// Имя
        public Man( string name )
        {
          _name = name;
        }
        /// 
        /// Меняет обращение для всех мужчин
        /// 
        /// Новое обращение
        public void ChangePrefix( string prefix )
        {
          _prefix = prefix;
        }
        /// 
        /// Выводит строковое представление экземпляра
        /// 
        /// Возвращает строковое представление
        public override string ToString()
        {
          return _prefix + " " + _name;
        }
      }
      public class Application
      {
        public static void Main()
        {
          // Создаем двух мужчин с разными именами
          Man smith = new Man("Smith");
          Man pitt = new Man("Pitt");
          // Выводим их начальные состояния
          Console.WriteLine("До изменения: " + smith + ", " + pitt);
          // Изменяем имя одного из них
          pitt._name = "Pumpkin";
          Console.WriteLine
    	  ("После изменения имени одного из них: " + smith + ", " + pitt);
          // Меняем обращение
          pitt.ChangePrefix("Dr.");
          Console.WriteLine
    	  ("После изменения обращения: " + smith + ", " + pitt);
        }
      }
    }
                        

    Вот вывод программы:

                  До изменения: Mr. Smith, Mr. Pitt
                  После изменения имени одного из них: Mr. Smith, Mr. Pumpkin
                  После изменения обращения: Dr. Smith, Dr. Pumpkin
                        

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

  • Элементы массивов, а также различные параметры будут обсуждены в соответствующих главах. Здесь мы разберем лишь локальные переменные:

    Локальные переменные - это переменные, объявленные в теле метода. Они не инициализируются автоматически и время их жизни зависит от компилятора, но оно не больше, чем время исполнения метода. Локальные переменные могут быть определены и в управляющих блоках for, while, foreach, if.

    using System;
    namespace LocalVariables
    {
      public class Application
      { 
        static int i = 117;
        public static void Main()
        {      
          for (int i = 0; i < 10; i++)
          {
            Console.WriteLine("i = {0}", i);
          }
          Console.WriteLine("i = {0}", Application.i);
        }
      }
    }
                        

    Вывод программы следующий:

    i = 0
    i = 1
    i = 2
    i = 3
    i = 4
    i = 5
    i = 6
    i = 7
    i = 8
    i = 9
    i = 117
                        

Назад | Вперёд






При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005
 

Hosted by uCoz