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

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

  Все выпуски  

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


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


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

Рассылка №4

Основы C#. Урок 10. Классы в C#.
Основы C#. Урок 11. Конструкторы классов.

Полные версии уроков (с картинками) можно найти по адресам
Урок 10. Классы в C#.
Урок 11. Конструкторы классов.

Основы C#. Урок 10. Классы в C#

Начиная с этого урока, приступаем к изучению классов.

Сначала пару слов о том, что такое классы. Представьте себе, что у вас есть некоторый объект, который характеризуется рядом свойств. Например, работник на некой фирме. У него есть такие свойства, как фамилия, возраст, стаж и т. п. Так вот, в этом случае удобно каждого работника описывать не рядом независимых переменных (строкового типа для фамилии, целого типа для возраста и стажа), а одной переменной типа Worker, внутри которой и содержаться переменные для фамилии, возраста и стажа. Это здесь самое важное - что в переменной типа Worker содержаться другие переменные. Конечно, типа Worker среди встроенных типов данных нет - ну так эта не беда - мы можем ввести его.

Еще одна важная вещь про классы - это то, что в классах помимо переменных разных типов содержатся функции (или, что тоже самое, методы) для работы с этими переменными. Скажем, в нашем примере с классом Worker логично ввесли специальные функции для записи возраста и стажа. Функции будут, в частности, проверять правильность вводимой информации. Например, ясно, что возраст у работника не может быть отрицательным или боольшим 150 ;). Так вот наша функция и будет проверять правильность введеного пользователем возраста.

Давайте рассмотрим первый пример класса. Создайте новое конслольное приложение для C# и введите следующий текст:

using System;
namespace test
{
    //Начало класса
    class Worker
    {
        public int age=0;
        public string name;
    }
    //Конец класса

    class Test
    {
        [STAThread]
        static void Main(string[] args)
        {
            Worker wrk1 = new Worker();
            wrk1.age=34;
            wrk1.name="Иванов";
            Console.WriteLine(wrk1.name+", "+wrk1.age);
        }
    }
}

Запустите программу. Она, как и следовало ожидать, выведет на экран "Иванов, 34".

Давайте кратко обсудим наш код. Во-первых, в строчках

...
    class Worker
    {
        public int age=0;
        public string name;
    }...

мы оределили наш класс Worker. Внутри этого класса существует две переменные - целая age для возраста и name строкового типа для имени. Обратите внимание, что, в отличие от C/C++, мы можем задавать некоторое начальное значение прямо сразу после объявления переменной:

...
        public int age=0;
 ...

Начальное значение задавать вовсе не обязательно - это видно по переменной name.

Перед переменными мы пишем ключевое слово public. Значение у него такое же, как и в C++ - а именно это означает, что эта переменная (или функция) будет видна вне класса. Если мы не напишем перед переменной никакого модификатора доступа, или напишем private, то пременая не будет видна снаружи класса и ее смогут использовать только фунции этого же класса (т. е. она будет для "внутреннего использования").

Далее в строчке

...
            Worker wrk1 = new Worker();
 ...

мы заводим экземпляр класса в куче (heap) и возвращаем на него ссылку.

Затем в строчках

...
            wrk1.age=34;
            wrk1.name="Иванов";
            Console.WriteLine(wrk1.name+", "+wrk1.age);
 ...

мы используем наш класс. А именно присваиваем некоторые значения для возраста и имени и выводим их потом на экран.

С этим уроком все.

Наверх

Основы C#. Урок 11. Конструкторы классов

Для начала кратко обсудим, что такое конструктор вообще. Конструктор - это функция (метод) класса. Раз эта функция, то описываем мы ее почти точно так же, как и любую другую функцию класса - пишем параметры в круглых скобках и т. п. Когда конструктор вызывается? В момент создания переменной. При этом у класса может быть несколько конструкторов - но при этом они должны различаться или типом параметров, или их количеством.

Этот урок будет основан на предыдущем. Откройте проект, созданный на прошлом уроке. Довайте добавим в наш класс Worker конструктор:

    ...
    class Worker
    {
        public int age=3;
        public string name;
        //Конструктор 1
        public Worker(int age, string name)
        {
            this.age=age;
            this.name=name;
        }
    }
    ...

Обратите внимание на ряд особенностей конструктора. Во-первых, конструктор называется как класс. Раз наш класс называется Worker, значит и конструктор должен называться точно также. И во-вторых, конструктор, в отличие от других методов класса, не возвращает никакого значения (даже типа void). Если вы знакомы с языком C++, то, несомнемно, это вам все знакомо.

Что делает наш конструктор? Он записывает передаваемые в него параметры во внутренние переменные класса. Обратите внимание, что называются они одинаково - age и age, name и name. Компилятор сначала ищет локальную переменную с таким именем, и, если не находит, то переменную класса. Поэтому age (и name) - это передаваемый в конструктор параметр. Если же нам надо сослаться на переменную класса (при существавании переменной с таким же именем, как и передаваемый в функцию параметр), то мы используем ключевое слово this. Оно всегда указывает на текущий экземпляр нашего класса. Таким образом в строчках

...
            this.age=age;
            this.name=name;
 ...

мы переаем параметры конструктора в переменые класса.

Теперь изменим тестовый класс test следующим образом:

...
        static void Main(string[] args)
        {
      //Вызываем конструктор
            Worker wrk1 = new Worker(40, "Вася");
            Console.WriteLine(wrk1.name+", "+wrk1.age);
        }
 ...

Теперь после объявления переменной мы вызываем конструктор с двумя параметрами, который запишет в переменные age и name экземпляра класса Worker значания 40 и "Вася". Строчком ниже эти значения выводятся на экран.

Наверх

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

Copyright сайт progs.biz, 2002


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

В избранное