Отправляет email-рассылки с помощью сервиса Sendsay

Финансы. Инструкция

  Все выпуски  

Уроки по C# и .NET.


Информационный Канал Subscribe.Ru

C# и .NET. Уроки с сайта http://progs.biz

Рассылка №11

Основы C#. Урок 23. Статические конструкторы.
Основы C#. Урок 24. Закрытые конструкторы или классы без экземпляров.

Полные версии уроков (с картинками) можно найти по адресам
Урок 23. Статические конструкторы.
Урок 24. Закрытые конструкторы или классы без экземпляров.

Основы C#. Урок 23. Статические конструкторы

Статическими к классе могут быть и конструкторы. Если обычный конструктор вызывается в момент создания экземпляра класса, то статический - в самом начале, т. е. перед созданием первого экземпляря класса.

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

    class MyClass
    {
        public static int data;
        //Статический конструктор
        static MyClass()
        {
            data=10;
        }
        //Конструктор
        public MyClass()
        {
            data++;
        }
    }
    class Test
    {
        public static void Main()
        {
            MyClass a=new MyClass();
            MyClass b=new MyClass();
            System.Console.WriteLine(MyClass.data);
        }
    }

Указанный фрагмент выведет на экран 12. Действительно, сначала вызовется статический конструктор, который присвоит значение 10 перемнной data. Затем для каждого созданного экземпляра класса MyClass вызовется обычный конструктор, к котором переменная data увеличится каждый раз на 1.

Обратите внимание, что оба конструктора без параметра. Противоречия тут нет, так как один из них - статический, а другой - нет.

Наверх

Основы C#. Урок 24. Закрытые конструкторы или классы без экземпляров

В C# нет глобальных переменных, функций или констант. Все они обязательно должны принадлежать некоторому классу. И если у вас имеется класс, содержащий в себе, например, некоторые нужные вам константы, то экземпляры такого класса вам не нужны (так как вы создали этот класс исключительно как хранилище). Чтобы запретить создание экземпляров класса, вы объявляете конструктор в нем как закрытый (то есть с модификатором private или вовсе без модификатора - так как отсутствие модификатора и подразумевает private). Это означает, что создать экземпляр такого класса не удастся (что нам и надо).

Вот пример такого класса:

namespace test
{
    //Класс без экземпляра
    class MyClass
    {
        //Закрытый конструктор
        private MyClass()
        {
        }
        public static int MyPhoneNumber=1239999;
    }
    class Test
    {
        public static void Main()
        {
            System.Console.WriteLine(MyClass.MyPhoneNumber);
        }
    }
}

Тут у нас класс MyClass имеет закрытый конструктор, так что создавать его экземпляры мы не можем. Так, следующий код будет ошибочным:

    class Test
    {
        public static void Main()
        {
            MyClass a=new MyClass(); //ошибка!!!
        }
    }

Использовать же статические переменные и константы такого класса мы можем (так, мы выводим на экран константу MyPhoneNumber).

Разумеется, в таком классе может содержать и методы:

    class MyClass
    {
        //Закрытый конструктор
        private MyClass()
        {
        }
        public static int MyPhoneNumber=1239999;
        public static int SomeNumber=1;
        public static int GetSomeNumber(){
            SomeNumber++;
            return SomeNumber;
        }
    }
    class Test
    {
        public static void Main()
        {
            System.Console.WriteLine(MyClass.GetSomeNumber()); //Выведется 2
            System.Console.WriteLine(MyClass.GetSomeNumber()); //Выведется 3
        }
    }

Указанный фрагмент выведет 2 и 3.

Наверх

Рассылки сайта progs.biz:

Subscribe.Ru
Уроки по ассемблеру
Уроки по ассемблеру. Использование MASM, примеры, FAQ.

Copyright Алексеев Игорь, 2002

Copyright сайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное