Классы и объекты

Код выглядит менее уродливо, но с переменными surname, surname2 явно что-то не так. Особенно если людей станет больше. Неплохо бы собрать все данные, относящиеся к одному человеку, в кучку. И сразу добавить к ним те функции, которые не нужны другие данные.

По сути дела нам надо перейти от типа данных "строка" к новому типу данных "человек", в который на данный момент будут входить три строки - фамилия имя и отчество. Само собой для этого давным-давно придуманы специальные инструменты.

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

А вот каждый конкретный человек со своими значениями ФИО будет экземпляром класса человек. Точно так же как каждый ящик со своими значениями высоты, ширины и глубины будет являться экземпляром класса ящик. Само собой у каждого класса может быть масса других параметров - например и у человека и у ящика может быть параметр масса, у человека может быть параметр пол - мужской или женский, а вот у ящика пол вряд ли будет (хотя кто знает, что нам готовит непредсказуемое будущее)

Еще раз приведу весь текст программы (файл Program.cs), чтоб вы обратили внимание где именно находится описание класса.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace TestConsoleApplication

{

class Program

{

static void Main(string[] args)

{

// создаем два экземпляра класса человек с разными фио

Person person1 = new Person("Пушкин", "Александр", "Сергеевич");

Person person2 = new Person("Гончарова", "Наталья", "Николаевна");

// выводим разные фио используя встроенные в класс функции - методы

System.Console.WriteLine(person1.GetFio());

System.Console.WriteLine(person1.GetFioInitials());

System.Console.WriteLine(person2.GetFio());

System.Console.WriteLine(person2.GetFioInitials());

//статическая функция одинакова для всех экземпляров класса и вызывается с имени самого класса

System.Console.WriteLine(Person.GetClassDescription());

System.Console.ReadLine();

}

}

// класс человека

public class Person

{

// три строковых переменные-свойства, доступные извне класса - public

public string Name = "";

public string Surname = "";

public string Otchestvo = "";

// конструктор, специальная функция, которая вызывается при создани экземпляра класса с помощью слова new

public Person(string surname, string name, string otchestvo)

{

Name = name;

Surname = surname;

Otchestvo = otchestvo;

}

// этим функциям не надо подавать на вход данные - они используют данные экземпляра класса

public string GetFio()

{

string fio = Surname + " " + Name + " " + Otchestvo;

return fio;

}

public string GetFioInitials()

{

string fio = Surname + " " + Name.Substring(0, 1) + ". " + Otchestvo.Substring(0, 1) + ".";

return fio;

}

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

public static string GetClassDescription()

{

return "Класс Person. Хранит данные о человеке.";

}

}

}

В профессиональном программировании считается дурным тоном давать свободный и бесконтрольный доступ к хранимым в классе данным. Чтобы запретить доступ извне к свойству Surname для него надо прописать другой модификатор доступа, вместо public - private. Записывать и считывать данные надо будет через специальные функции, аналогичные тем функциям, которые на самом деле что-то вычисляют в духе GetFio. Чтобы не возиться с написанием кучи функций типа GetName и SetName в C# применяется специальный механизм свойств, на основании которых уже при компиляции программы автоматически генерятся эти однотипные функции. Такой способ облегчить жизнь программисту называется синтаксическим сахаром. В Visual Studio есть даже специальная функция для этого.

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: