В мире существуют сотни, а может быть, и тысячи, улиц, названных именем А.С. Пушкина. Но если на конверте указана одна из них, то как письмо находит своего получателя? Естественно, адрес состоит не только из улицы. Мы, по меньшей мере, добавляем название страны и города.

Очевидно, если мы укажем адрес на конверте:
то почта не распознает, где эта улица и где этот дом.
Можно написать так:
Так-то лучше, а если существуют два города с одинаковым названием? Например, город Москва есть в США! Поэтому для надежности добавим еще и название страны:
В России адрес принято писать так:
Теперь письмо обязательно дойдет до адресата. Например, второе письмо доставят самолетом в Республику Казахстан, из аэропорта его перевезут на почтамт города Алма-Аты, а потом почтальон пойдет на улицу Пушкина и найдет дом под номером 82.
Формат (Республика Казахстан, г. Алма-Ата, ул. Пушкина) можно считать "пространством имен" для отправки писем.
Какое же отношение все это имеет к программированию?
Предположим, разработчиками корпорации Microsoft написан класс "Point", используемый для рисования фигуры в определенной точке, но и вы создали класс с именем "Point", например, для загрузки фотографии человека, указывающего на что-либо.
Очевидно, что оба класса выполняют абсолютно разные действия, но и тот и другой можно назвать Point. С каким же из них будет работать программа?
Безусловно, имеет смысл использовать разные имена. В среде .NET для этого можно задействовать различные "пространства имен". Например, так:
Microsoft.Drawing.PointAnna.PictureStuff.PointИмена классов сохранены ( Point ), но пространства имен перед именами класса позволяют четко видеть, в каком из них находится класс. И теперь, если мне нужно использовать класс Point из пространства Anna, я могу создать объект Point при помощи следующего метода-конструктора:
Anna.PictureStuff.Point annaPoint = new Anna.PictureStuff.Point();
Для работы с классом Point от Microsoft подойдет следующий код:
Microsoft.Drawing.Point microsoftPoint = new Microsoft.Drawing.Point();
Несмотря на то что оба моих объекта принадлежат классу Point, они относятся к разным классам и выполняют разные действия.
Разместить собственный класс в пространстве имен очень просто. Раньше мы давали описание класса следующим образом:
class Animal
{
...
}
Теперь создайте пространство имен и внутри него опишите класс:
namespace Anna
{
class Animal
{
...
}
}
Или, если хотите, сделайте так:
namespace Anna.FunStuff
{
class Animal
{
...
}
}
Пространства имен могут быть вложенными друг в друга. Тогда их имена разделяются точками. В последнем примере класс Animal входит в пространство имен Anna.FunStuff.
Все библиотеки классов, которые предлагают разработчики Майкрософт, а также других организаций, помещаются в пространства имен. Поэтому, прежде чем использовать код из таких библиотек, необходимо понимать, как работать с пространствами имен.
| Строительный блок: Пространство имен | |
|---|---|
| Для логического объединения классов одной тематики рекомендуется помещать их в одно пространство имен. Имя пространства должно иметь содержательный смысл. | namespace Charles.SchoolUtilities
{
class Animal
{
}
}
|
| Экземпляр или объект приведенного выше класса можно создавать, вызывая конструктор класса. | Charles.SchoolUtilities.Animal cat; cat = new Charles.SchoolUtilities.Animal(); |
| Если нужно создать много объектов одного пространства имен, то в начале программы в предложении "using" можно указать пространство имен. Тогда компьютер сам будет находить классы в этом пространстве. | // говорим компьютеру, что будем использовать //классы из этого пространства имен using Charles.SchoolUtilities; // создание объекта Animal из пространства //имен Charles.SchoolUtilities Animal cat = new Animal(); |
Так как этот курс адресован тем, кто только начинает знакомиться с искусством программирования, мы не станем рассматривать слишком сложные вещи, поэтому расскажем о наследовании немного.
Иногда вам будет встречаться объявление классов следующего вида:
class MyFancyClass : Form
{
...
}
Сравните его с обычным объявлением класса:
class MyFancyClass
{
...
}
Поясним, что же происходит, когда после имени класса через двоеточие указывается имя другого класса и объявлению придается совсем другой смысл.
Человек, как правило, наследует определенные качества от своих родителей. У вас может быть цвет волос как у мамы, а нос — папин.

Это не означает, что вы полностью похожи на своих родителей. Несомненно, вы обладаете различными уникальными качествами и способностями, но определенные свойства характера и физические особенности "заложены" в вас при рождении.
При написании программного кода было бы полезно иметь возможность наследования всего набора способностей существующего класса, будь то собственный класс или чей-то еще.
Приведем пример. Определим два класса — Animal и Bird. Класс Bird объявим наследником класса Animal.
class Animal
{
//Поля класса
public string kindOfAnimal;
public string name;
public int numberOfLegs;
public int height;
public int length;
public string color;
bool hasTail;
protected bool isMammal;
private bool spellingCorrect;
…
}
// Класс "Bird" — наследник класса "Animal"
class Bird : Animal
{
public string featherColor;
…
}
В реальном мире птица — это вид животного, но у птиц есть свои отличительные признаки, характерные только для них. Тогда имеет смысл классу Bird наследовать все признаки класса Animal и стать обладателем ряда дополнительных признаков. В данном случае мы определим одно специальное поле, характерное для птиц, — featherColor — цвет перьев.
Итак, пишем:
class Bird : Animal
{
...
}
Таким образом мы сообщаем следующее: "Я определяю новый класс Bird, но он должен автоматически наследовать все свойства класса Animal ". Иными словами, класс Bird является производным от класса Animal.
При создании экземпляра Bird мы можем обращаться как к полям, определенным в классе Bird, так и к наследуемым полям класса Animal, конечно, если эти поля не являются закрытыми:
Bird b = new Bird(); b.kindOfAnimal = "Орел"; b.isMammal = false; b.featherColor = "темно-желтый";
Bird, то доступ к защищенному ( protected ) свойству isMammal разрешен, поскольку класс Bird — потомок класса Animal ; если же из метода класса клиента, то это свойство будет недоступно.Более важное замечание: о наследовании можно говорить, только когда объекты двух классов связаны отношением "является". Каждая птица (объект класса Bird ) является животным (объектом класса Animal ). Поэтому класс Bird может быть объявлен наследником класса Animal, но класс Car, автомобили, нельзя объявлять наследником класса Animal, поскольку автомобили не являются животными.
Для простоты мы не включили в программу объявление методов в классах Animal и Bird, но для них действуют те же правила доступа, что и для полей.
Предположим, вам нужно написать программу, выполняемую в обычном окне, и понадобятся возможности изменения размера окна, его разворачивания, сворачивания, перетаскивания и некоторые другие. Имеет смысл, чтобы ваш класс "наследовал" возможности класса, который уже работает с подобным типом интерфейса. Обычным выбором System.Windows.Forms.Form.
В таком случае пишем:
class MyFancyClass : Form
{
...
}
Фактически мы говорим: "Я создаю собственный класс, но он должен автоматически наследовать все возможности класса Form ".
Для использования класса совсем не обязательно наследовать от него поля! Наследование лучше всего подходит для тех случаев, когда то, чего вы пытаетесь добиться, можно получить от существующего класса, дополнительно расширив его или настроив.
| Строительный блок: Наследование | |
|---|---|
| Класс может наследовать свойства и действия другого класса. | public class Musician
{
public string name;
public int age;
public bool canSing;
}
|
| Класс "Guitarist" наследует все поля из класса "Musician", а кроме того, имеет два собственных поля. Имя класса Musician, написанное после двоеточия, сообщает компьютеру, что новый класс "Guitarist" наследует поля и методы |
public class Guitarist : Musician
{
public string guitarType;
public string guitarBrand;
}
|
| Создав объект класса Guitarist, можно установить его свойства, если они являются открытыми для доступа. | Guitarist g = new Guitarist(); g.name = "Jimbo van Helsdingen"; g.age = 28; g.canSing = false; g.guitarType = "Acoustic"; g.guitarBrand = "Gibson"; |
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.