Код выглядит менее уродливо, но с переменными 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 есть даже специальная функция для этого.
В этом же меню есть много других крайне полезных пунктов - например переименование переменной, класса, пространства имен или функции сразу во всех местах проекта.