Структура программ реального мира. Пространства имен.
Реальное программирование на 99% состоит из использования уже готовых классов и функций, написанных другими программистами или написания собственных. Так как в реальности мы имеем дело с сотнями и тысячами сложных классов, состоящих из сотен свойств и методов, то даже классы приходится разбивать на группы - пространства имен.
Для нашей тестовой программы мы используем пространство имен TestConsoleApplication, состоящее из двух классов - Program и Person.
Класс Program автоматически создается для каждого Net приложения, это стандартный класс. Как правило он состоит из одной функции/метода static void Main(string[] args), которая выполняется при запуске приложения.
Разработчики C# и .Net очень любят классы. Просто очень-очень. Так что в итоге здесь все является классами и даже функции без классов не существуют. Если вам не нужны ни классы ни экземпляры, и вы хотите просто сделать нескольких функций - вам все равно придется создать класс, в который добавить несколько статических (не требующих создания экземпляра) функций.
Классическим пример такой функции может послужить умножение
ublic static int Multiply(int a, int b)
{
return a * b;
}
Которое где-то в другом месте вызывается как
System.Console.WriteLine(SomeClassName.Multiply(2, 2));
Но на самом деле в .Net уже есть такой класс со сборником арифметических функций Math - в который входят функции для вычисления всевозможных синусов, тангенсов, квадратных корней, округления чисел.
Другой пример класса который по сути своей является библиотекой функций - класс Convert, содержащий функции для преобразования одних типов данных в другие
int testNum = Convert.ToInt32("34");
В .Net Framework входит множество уже готовых классов от программистов Microsoft, разделенных на множество пространств имен. Самые-самые базовые входят в пространство имен System.
Теперь можно полностью объяснить использовавшийся в этой и предыдущей статьях код
System.Console.WriteLine("Привет мир!");
В данном случае мы вызываем функцию public static void WriteLine(string value) из класса Console входящего в пространство имен System. И уже где-то там внутри нее, скорее всего еще несколькими уровнями ниже выполняется рисование по пикселям окна с консолью и наших букв.
Чтобы не писать каждый раз пространство имен используется директива using
и на самом деле если мы уже прописали
using System;
то вывод текста в консоль можно было бы записать проще (помешали лень и копирование в буфер)
Console.WriteLine(person1.GetFio());
В C# классами и обьектами является все, в том числе строки. Каждая строка - это на самом деле экземпляр класса String. Теперь можно понять и следующий код:
string fio = surname + " " + name.Substring(0, 1) + ". " + otchestvo.Substring(0, 1) + ".";
Здес мы вызываем один из методов класса String - public string Substring(int startIndex, int length), который возвращает кусок строки и принимает два аргумента, индекс символа, с которого надо начать вырезание подстроки (нумерация начинается с 0) и длину вырезаемой подстроки.
Если же нам не нужны методы вообще, просто хочется собрать в кучку данные - можно использовать структуры. С другой стороны можно создать специальный класс без функций, с одними данными - для этого есть умное название обьект для передачи данных (Data Transfer Object, DTO).