C# WPF04 декабря

Что такое класс? C#

 

Что такое понятие Class?

Читаем в умных книжках – «Описанием объекта является класс».

Правда все стало понятно?

Неправда. Ведь у нас появилось еще и некий объект, описанием которого является Class.

Ладно, читаем дальше:

Класс представляет собой шаблон, по которому определяется форма объекта. В нем указываются данные и код, который будет оперировать этими данными. В C# используется спецификация класса для построения объектов, которые являются экземплярами класса. Следовательно, класс, по существу, представляет собой ряд схематических описаний способа построения объекта. При этом очень важно подчеркнуть, что класс является логической абстракцией. Физическое представление класса появится в оперативной памяти лишь после того, как будет создан объект этого класса. 
Классы и структуры — это, по сути, шаблоны, по которым можно создавать объекты. Каждый объект содержит данные и методы, манипулирующие этими данными.

Час от часу не легче.

Попробуем перевести эту программистскую абракадабру на «гражданский язык».

Для этого начнем с определения объекта, а затем перейдем уже к пониманию класса.

Что же они подразумевают под понятием объект (object)? 

Не поверите. 

Но под понятием объект подразумевается любой предмет, человек, животное, дом, паровоз, да все что угодно, что можно и что мы хотим описать.

Да, да, да - так просто.

Итак получается, что класс это не более чем абстракция описывающая объект.

И теперь получается, что в классе нам просто напросто надо описать этот объект, его свойства, поведение и прочие свойства или медоды, которые могут быть присущи данному объекту .

Такое абстрактное описание объекта и его поведения в программировании громко и таинственно называется классом (Class).

Таким образом мы можем создать любой класс, описывающий любой предмет или животное – человека, ребенка, женщина, дом, больница, машина, вообще любой.

Например, мы хотим описать объект Кран – обычный кран на колесах.

Для этого создаем класс, называем его Кран и описываем свойства присущие крану, которые нам нужны. 

Примерно это выглядит так:

class Kran

{ вес крана, грузоподъемность крана, количество осей, длина крана, длина стрелы, количество крановщиков, расположение кабины и прочее, проче, прочее }

Т.е. создавая класс мы создаем абстракцию, описывающую конкретный объект.  

Итак, класс в простейшем случае – это не более чем описание параметров объекта.

Однако непосредственно работать с этой абстракцией (записывать в нее и считывать из нее данные) мы не можем.

Давайте опишем объект в виде Ребенка, который мы хотим описать, чтобы потом в нашей программе в группе детского садика, что-то с ним делать - строить по росту, садить за парту, определить ему спальню и т.п.

Опишем у ребенка несколько параметров ( в дальнейшем свойств)

• фамилия Surname – строка

• имя Name – строка

• пол Pol  –  (мальчик / девочка) – строка

• возраст Age – число

• pocт Rost – число

• вес Ves – число

• носит очки Ochki – ( да  / нет) – bool – булевая переменная (true / false)

Чтобы описать эти параметры (свойства) создадим класс – сlass Childrenв котором и все это и опишем.

При этом в классе при описании свойств обязательно необходимо указать тип их видимость из других частей программы – public

Тогда эти свойства будут видимы из любой части, да и класс сделаем тоже публичным. 

Описание класса будет таким.

Понятно, что Имя и Фамилия это строки, возраст, рост и вес это числа, очки это булевая переменна - истина или ложь. 

public class Children
{

public string Surname { get; set; }

public string Name { get; set; }

public int Age { get; set; }

public int Rost { get; set; }

public int Ves { get; set; }

public bool Ochki { get; set; }

}

Свойство {get; set;} указывает, что эти поля как принимают данные, так и отдают данные. Об этом поговорим дальше.

В результате подобного описания мы получим Класс, о котором наша программа узнает во время загрузки. 

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

Здесь мы упомянули о полях класса.

Поля и свойства класса это тонкий вопрос.

Чтобы не углубляться в тонкости этого вопроса для обучения просто примем такой постулат, что поля класса будут приватными (т.е. видимыми внутри класса, а свойства публичными).

Например, в наш класс добавим поле – количество воспитателей KolvoVospitatelei.

И запишем:

public class Children
{

private int  KolvoVospitatelei;  // поле 

public string Surname { get; set; } // свойство

public string Name { get; set; } // свойство

public int Age { get; set; } // свойство

public int Rost { get; set; } // свойство

public int Ves { get; set; } // свойство

public bool Ochki { get; set; } // свойство

}

Запустим программу на выполнение и при компиляции программа у себя в памяти создат абстрактное описание нашего класса Children.

Это будет всего лишь описание в которое ничего невозможно записать, так это всего лишь некий свод правил.

Но мы хотим начать работать и ввести данные первого ребенка, например – Петров Иван, 6 лет, 12 кг, мальчик, в очках.

И вот тут для начала работы нам надо создать объект класса.  

Как же создается объект класса?

Никой магии. Мы пишем простую команду

      var Rebenok = new Children(); 

где:

Rebenok – это придуманная нами переменная, в которую просто скопируются правила, описанные в классе Children.   

new Children() – это команда на создание нового экземпляра класса Children.

Таким образом в памяти компьютера мы создали физическую величину Rebenok, с которой теперь можно производить любые действия.

 

Что такое объект класса ?

Повторенье мать ученья...

Чуть ранее мы создали класс class Children, который описывает ребенка.

Проблема состояла в том, что записать в этот класс мы ничего не можем так как класс – это не более чем свод инструкций.

Для того чтобы можно было работать (создать и описать ребенка) мы создали новый объект нашего класса (объект Rebenok), в который мы командой new переписали свод интсрукций из класса родителя (в нашем случае из класса Children).

Теперь этот, вновь созданный объект Rebenok , будет знать все что знает родительский класс, и так как он физически существует в памяти, то теперь можно работать сего полями, свойствами, методами, конструкторами и прочим, что было описано в родительском классе Children.   

Итак, чтобы описать ребенка мы в обязательном порядке создаем в памяти новый объект класса Children.

Делается это просто, одной командой.

Создаем любую переменную, например: var Rebenok 

Командой new Children() в переменной Rebenok создаем новый экземпляр класса Children.  

      var Rebenok = new Children(); 

В результате чего переменная Rebenok будет знать все о классе Children.  

 

Как работать с объектом класса

 

Теперь, с объектом Rebenok мы можем работать так как нам заблагорассудится

Например мы хотим записать данные о первом ребенке.

Делается это просто .

Сначала мы обращаемся к созданному нами экземпляру класса Rebenok, затем ставим точку и указываем в какое именно свойство мы хотим произвести запись. Так как мы будем записывать фамилию, то мы обращаемся к свойству Surname.

Код:

       Rebenok.Surname = "Петров";

итак в свойство Surname мы записали фамилию Петров.

Код для записи возраста:

       Rebenok.Age = 5;

мы в свойство Age запишем возраст 5.

Как же поступить если у нас в группе двадцать детей?

Все очень просто.

Значит нам придется создать двадцать экземпляров класса Children. 

 

  var Rebenok = new Children(); 

  var Rebenok1 = new Children(); 

  var Rebenok2 = new Children(); 

  var Rebenok3 = new Children(); 

...

  var Rebenok20 = new Children(); 

 

Ура, группа создана !!!

 

Теперь по имени объекта Rebenok3 или Rebenok19 мы можем работать с каждым ребенком по отдельности.

Данные-члены

Данные-члены — это те члены, которые содержат данные класса — поля, константы, события. Данные-члены могут быть статическими (static). Член класса является членом экземпляра, если только он не объявлен явно как static. Давайте рассмотрим виды этих данных:

Поля (field)

Это любые переменные, ассоциированные с классом.

Константы

Константы могут быть ассоциированы с классом тем же способом, что и переменные. Константа объявляется с помощью ключевого слова const. Если она объявлена как public, то в этом случае становится доступной извне класса.

События

Это члены класса, позволяющие объекту уведомлять вызывающий код о том, что случилось нечто достойное упоминания, например, изменение свойства класса либо некоторое взаимодействие с пользователем. Клиент может иметь код, известный как обработчик событий, реагирующий на них.

Функции-члены

Функции-члены — это члены, которые обеспечивают некоторую функциональность для манипулирования данными класса. Они включают методы, свойства, конструкторы, финализаторы, операции и индексаторы:

Методы (method)

Это функции, ассоциированные с определенным классом. Как и данные-члены, по умолчанию они являются членами экземпляра. Они могут быть объявлены статическими с помощью модификатора static.

Свойства (property)

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

Конструкторы (constructor)

Это специальные функции, вызываемые автоматически при инициализации объекта. Их имена совпадают с именами классов, которым они принадлежат, и они не имеют типа возврата. Конструкторы полезны для инициализации полей класса.

Финализаторы (finalizer)

Вызываются, когда среда CLR определяет, что объект больше не нужен. Они имеют то же имя, что и класс, но с предшествующим символом тильды. Предсказать точно, когда будет вызван финализатор, невозможно.

Операции (operator)

Это простейшие действия вроде + или -. Когда вы складываете два целых числа, то, строго говоря, применяете операцию + к целым. Однако C# позволяет указать, как существующие операции будут работать с пользовательскими классами (так называемая перегрузка операции).

Индексаторы (indexer)

Позволяют индексировать объекты таким же способом, как массив или коллекцию.

 

   

 

 

 

 

 

Теги: #c#, #class

Комментарии

Добавить комментарий:

Отметьте что вы не робот

Вернуться наверх