Class program c что это
Точкой входа в программу на языке C# является метод Main. Именно с этого метода начинается выполнение программы на C#. И программа на C# должна обязательно иметь метод Main . Однако может возникнуть вопрос, какой еще метод Main, если, например, Visual Studio 2022 по умолчанию создает проект консольного приложения со следующим кодом:
И эта программа никаких методов Main не содержит, но при этом нормально выполняется и выводит на консоль строку «Hello, World!», как и запланировано. Это так называемая программа верхнего уровня (top-level program). А вызов Console.WriteLine(«Hello, World!») представляет инструкцию вехнего уровня (top-level statement)
Однако в реальности этот код неявно помещается компилятором в метод Main, который, в свою очередь, помещается в класс Program. В действительности название класса может быть любым (как правило, это класс Program, собственно поэтому генерируемый по умолчанию файл кода называется Program.cs ). Но метод Main является обязательной частью консольного приложения. Поэтому выше представленный код фактически эквивалентен следующей программе:
Определение метода Main обязательно начинается с модификатора static , которое указывает, что метод Main — статический. Позже мы подробнее разберем, что все это значит.
Возвращаемым типом метода Main обязательно является тип void . Кроме того, в качестве параметра он принимает массив строк — string[] args — в реальной программе это те параметры, через которые при запуске программы из консоли мы можем передать ей некоторые значения. Внутри метода располагаются действия, которые выполняет программа.
До Visual Studio 2022 все предыдущие студии создавали по умолчанию примерно такой код. Но начиная с Visual Studio 2022 нам необязательно вручную определять класс Program и в нем метод Main — компилятор генерирует их самостоятельно.
Если мы определяем какие-то переменные, константы, методы и обращаемся к ним, они помещаются в метод Main. Например, следующая программа верхнего уровня
будет аналогична следующей программе:
Если определяются новые типы, например, классы, то они помещаются вне класса Program. Например, код:
будет аналогичен следующему
Однако надо учитывать, что опредления типов (в частности классов) должны идти в конце файла после инструкций верхнего уровня. То есть:
Таким образом, мы можем продолжать писать программы верхнего уровня без явного определения метода Main. Либо мы можем явным образом определить метод Main и класс Program:
И этот код будет выполняться аналогичным образом, как если бы мы не использовали класс Program и метод Main.
Простая программа на C#

Давайте создадим новое консольное приложение в среде Visual Studio 2010 и наберем следующий код:
В результате получилось определение типа класса, поддерживающее единственный метод по имени Main(). По умолчанию классу, в котором определяется метод Main(), в Visual Studio 2010 назначается имя Program; при желании это имя легко изменить. Класс, определяющий метод Main(), должен обязательно присутствовать в каждом исполняемом приложении на C# (будь то консольная программа, настольная программа для Windows или служба Windows), поскольку он применяется для обозначения точки входа в приложение.
Чтобы посмотреть результат работы данного приложения на этапе отладки, в программной среде Visual Studio 2010 необходимо нажать кнопку «Начать отладку» или нажать <F5>. Результатом отладки этого приложения будет консольное окно следующего вида:

Давайте проанализируем данную программу более подробно, начиная с ее имени.
В отличие от ряда других языков программирования, и в особенности Java, где имя файла программы имеет большое значение, имя программы на C# может быть произвольным. Visual Studio по умолчанию задает имя Program.cs, при этом в C# файл с исходным текстом этой программы можно было бы назвать как угодно. Например, его можно было назвать Sample.cs, Test.cs или даже X.cs.
Обратите внимание, что в файлах с исходным текстом программ на C# условно принято расширение .cs, и это условие вы должны соблюдать. Кроме того, многие программисты называют файлы с исходным текстом своих программ по имени основного класса, определенного в программе.
Рассмотрим первую строку программы:
Эта строка означает, что в программе используется пространство имен System. В C# пространство имен определяет область объявлений. Благодаря пространству имен одно множество имен отделяется от других. По существу, имена, объявляемые в одном пространстве имен, не вступают в конфликт с именами, объявляемыми в другом пространстве имен. В анализируемой программе используется пространство имен System, которое зарезервировано для элементов, связанных с библиотекой классов среды .NET Framework, применяемой в C#. Ключевое слово using просто констатирует тот факт, что в программе используются имена в заданном пространстве имен. (Попутно обратим внимание на весьма любопытную возможность создавать собственные пространства имен, что особенно полезно для работы над крупными проектами.)
Хочу обратить ваше внимание, что использование данной строки в программе не обязательно, т.к. в C# можно всегда полностью определить имя с помощью пространства имен, к которому оно принадлежит. Например, строку
можно переписать следующим образом
Однако указывать пространство имен System всякий раз, когда используется член этого пространства, — довольно утомительное занятие, и поэтому большинство программистов на C# вводят директиву using System в начале своих программ. Следует, однако, иметь в виду, что любое имя можно всегда определить, явно указав его пространство имен, если в этом есть необходимость.
С помощью ключевого слова namespace объявляется пространство имен, с которым должен быть ассоциирован класс. Весь код в последующих фигурных скобках рассматривается как принадлежащий этому пространству имен. Оператор using специфицирует пространство имен, которое должен просматривать компилятор в поисках классов, упомянутых в коде, но не определенных в текущем пространстве имен. Это служит тем же целям, что оператор import в Java и using namespace в С++.
Перейдем к следующей строке программы:
В этой строке ключевое слово class служит для объявления вновь определяемого класса. Класс является основной единицей инкапсуляции в C#, a Program — это имя класса. Определение класса начинается с открывающей фигурной скобки «<" и оканчивается закрывающей фигурной скобкой ">«. Элементы, заключенные в эти фигурные скобки, являются членами класса. Не вдаваясь пока что в подробности, достаточно сказать, что в C# большая часть действий, выполняемых в программе, происходит именно в классе.
Метод Main(), как уже говорилось, является точкой входа в программу. Формально класс, в котором определяется метод Main(), называется объектом приложения. Хотя в одном исполняемом приложении допускается иметь более одного такого объекта (это может быть удобно при проведении модульного тестирования), при этом обязательно необходимо информировать компилятор о том, какой из методов Main() должен использоваться в качестве входной точки. Для этого нужно либо указать опцию main в командной строке, либо выбрать соответствующий вариант в раскрывающемся списке на вкладке Application (Приложение) окна редактора свойств проекта в Visual Studio 2010.
Обратите внимание, что в сигнатуре метода Main() присутствует ключевое слово static. Oбласть действия статических (static) членов охватывает уровень всего класса (а не уровень отдельного объекта) и потому они могут вызываться без предварительного создания нового экземпляра класса.
Внутри метода Main() используется несколько встроенных методов предопределенного класса Console, в частности BackgroundColor — задает цвет фона, ForegroundColor — задает цвет контента (в нашем случае текста), WriteLine() — выводит на экран строку и ReadLine() — считывает данные из консоли.
Последним, немаловажным элементом являются комментарии, подробно расписанные в следующей статье.
Классы и объекты C#
Язык C# является объектно-ориентированным языком программирования. Это значит, что любую программу (проект) на языке C# можно представить в виде одного или нескольких объектов, которые могут взаимодействовать между собой. Пониманием того, как объявить класс и наделить его определенными свойствами, создать и управлять объектами в C# можно считать одними из главных задач при изучении этого языка программирования. До сих пор мы хоть и использовали в изучении основ C# классы и объекты, но особо и не задумывались об этом, так как всё наше внимание было уделено изучению отдельных типов данных, которые можно назвать примитивными. Сегодня же мы начнем разбираться с такими пользовательскими типами данных как классы и научимся создавать пусть и простые, но объекты C#.
Класс и объект: в чем отличие?
Вообще, когда читаешь различную литературу по программированию на любом объектно-ориентированном языке программирования будь то C# или Delphi и доходишь до главы про классы и объекты, то невольно начинаешь теряться и путаться в определениях, что такое класс, а что такое объект и чем они отличаются. Самое легкое объяснение,которое мне встречалось звучало так: «Описанием объекта является класс , а объект представляет экземпляр этого класса«. Проще не придумать. Но это, если иметь хотя бы малейшее представление о программировании, а если таковых представлений нет?
В свое время, для самого себя я провел следующую аналогию между классами и объектами в программировании и материальным миром: есть чертеж, например, дома, а есть сам дом. Чертеж может содержать описание свойств дома (длина, ширина, высота и т.д.). Так вот, чертеж — это класс, а дом — это объект (реальная сущность, которую можно измерить, потрогать и так далее). Конечно, это очень упрощенная аналогия, не в полной мере описывающая что такое класс,а что такое объект, но, тем не менее, для начала изучения классов и объектов нам этого должно хватить.
Описание класса в C#
Класс в C# -это пользовательский тип данных. До сих пор мы оперировали встроенными типами данных типа целых чисел, массивов и так далее. Сейчас же мы будем создавать собственный тип данных. В самом общем случае, для описания класса в C# используется следующая конструкция:
Ключевым словом class мы указываем на то, что создаем тип данных — класс. Далее идёт название класса,а в фигурных скобках указываются поля, свойства, методы класса и прочие интересные вещи с которыми мы будем постепенно знакомиться.
Где можно размещать классы? Вообще, в C# нет чёткого требования к тому где и как размещать новые классы — вы можете размещать их в пространстве имён, вне пространства имен в отдельных или в одном файле программы и так далее. Однако, по негласному правилу и для дальнейшего удобства поддержки вашего проекта, рекомендуется размещать каждый класс в отдельном файле. Давайте создадим наш первый класс и посмотрим как с ним можно работать.
Первый класс в C#
Раз уж в начале шла речь про чертежи и дома, то пусть наш первый класс и будет описаться дом. Создаем новый проект консольного приложения C#. Перед нами откроется, как обычно, редактор кода с открытым файлом Program.cs :
Своё приложение я назвал FirstClass . Теперь мы могли бы объявить наш новый класс прямо в этом файле, но я бы рекомендовал сразу привыкать к вышеизложенному правилу: 1 файл = 1 класс, поэтому кликаем правой кнопкой мыши по названию проекта в «Обозревателе решений» Visual Studio и выбираем пункт меню «Добавить — Создать элемент»:

В появившемся окне выбираем первый пункт — «Класс» и в самом низу окна задаем название файла. Например, я дал файлу название «Building.cs»

Нажимаем кнопку «Добавить» и Visual Studio создаст нам новый файл следующего содержания:
Обратите внимание, что, по умолчанию, наш новый класс получил имя по имени файла ( Building ) и размещен он в том же пространстве имен, что и класс Prorgam нашего приложения. Теперь нам необходимо наделить наш класс определенной функциональностью. Вся функциональность класс представляется его членами — полями, свойствами, методами и событиями. О каждом из членов класса мы поговорим подробнее, а сегодня воспользуемся только двумя из них — полями и методами.
Поле класса (или второе название — атрибут) — это переменная , описание которой мы даем при создании класса. Например, здание ( Building ) имеет свою ширину, длину и высоту. Создадим три поля:
Теперь наш класс содержит три поля, в которых будут храниться данные о нашем здании.
Будем считать, что все здания имеют прямоугольную форму, напишем метод, позволяющий рассчитать объем нашего здания:
Итак, мы создали новый тип данных — класс Building . Для того, чтобы использовать возможности этого класса в своем приложении, мы должны создать переменную этого типа (объект) и инициализировать её. Для инициализации объектов используются специальные методы — конструкторы.
Конструкторы
Конструкторы вызываются при создании нового объекта и используются для его (объекта) инициализации. По умолчанию любой класс C# имеет хотя бы один конструктор.
Конструктор по умолчанию
Конструктор по умолчанию не имеет ни параметров ни тела. Если вы при описании класса не создаете свой конструктор, то при создании объекта используется конструктор по умолчанию. Например, создадим объект здания, используя конструктор по умолчанию. Для этого, кликните в обозревателе решений левой кнопкой мыши по файлу «Program.cs» и напишите следующий код:
Здесь мы объявили переменную (объект) building типа Building (нашего класса) и инициализировали её, используя конструктор по умолчанию. Чтобы создать объект мы использовали ключевое слово new (этот оператор выделяет память для нового объекта) и для вызова конструктора поставили после названия класса круглые скобки. После этого, переменная building будет содержать ссылку на объект в памяти. Во второй строке мы вывели в консоль объем нового здания. Ну, а так как по умолчанию у нас все переменные вещественного типа инициализируются значением 0 , то при запуске приложения мы увидим в консоли вот такую запись:
Собственные конструкторы
Для класса в C# можно создать любое количество своих конструкторов. Например, создадим такой конструктор для нашего класса:
Обратите внимание, что название конструктора должно полностью совпадать с названием класса. В остальном, конструктор ничем не отличается от методов C# о которых мы уже говорили. В нашем конструкторе я использовал ключевое слово this , которое представляет ссылку на текущий экземпляр класса. Это ключевое слово может использоваться для различных нужд, но, конкретно в данном случае я использовал this потому что имена параметров у конструктора полностью совпадают с именами полей класса. Если бы я не использовал this , то компилятор не понял, что я хочу сделать (присвоить полю класса значение параметра метода) и предложил бы избавиться от лишнего присваивания:
Об этом ключевом слове мы ещё поговорим, а пока вернемся к нашему классу. После того как вы создадите свой конструктор конструктор по умолчанию перестанет использоваться и вы увидите в списке ошибок в Visual Studio следующую ошибку:
Наш конструктор должен содержать три обязательных параметра и теперь создать объект класса мы можем, например, так:
Как и в любом методе в C#, мы можем определить в конструкторе необязательные параметры. Например, так:
И теперь два следующих объекта будут абсолютно идентичны:
Объем второго здания: 1200
Инициализаторы объектов
Инициализаторы объектов позволяют присваивать значения всем доступным извне полям и свойствам объекта в момент его создания без явного вызова конструктора. Чтобы продемонстрировать использование инициализаторов объектов, изменим наш класс следующим образом: во-первых, все поля класса сделаем доступными извне — добавим им модификатор public и, во-вторых, напишем ещё один конструктор:
Второй конструктор также использует ключевое слово this , то есть, при вот таком создании объекта:
будет вызван наш первый конструктор с параметрами 20, 20, 3 . Теперь посмотрим, как мы можем воспользоваться инициализатором объекта:
Здесь мы в фигурных скобках указали значение всем публичным полям класса и без явного вызова конструктора создали объект. При этом следует учитывать следующие особенности инициализатора объектов:
- используя инициализатор мы можем установить значения только доступных из внешнего кода полей и свойств объекта. Именно поэтому мы добавили к нашим полям модификатор public .
- несмотря на то, что явного вызова конструктора не было, конструктор вызывается (в нашем примере был вызван второй конструктор — без параметров) и только после вызова конструктора выполняется инициализатор. Таким образом, мы перезаписали поля нашего объекта в инициализаторе.
Проверить второй пункт достаточно просто — создадим снова два объекта зданий: один — с конструктором, второй — с инициализатором и посмотрим на вывод консоли:
Объем второго здания: 1200
Как видите, инициализатор объекта перезаписал значение полей и в консоли мы увидели значение 6000 .
Итого
Итак, сегодня мы познакомились с основными моментами создания классов и объектов в C#, создали свой первый класс и научились использовать конструкторы и инициализаторы объектов. Однако, изучение классов и объектов C# на этом не заканчивается. В следующий раз поговорим о свойствах и модификаторах доступа.
Класс Program в C# (си шарп)
Май 11th, 2013
admin
Методы всегда находятся внутри декларации типа. Тип может быть классом (class) или структурой (struct) в С# (си шарп).
class Program
<
//Метод Main
>
Большинство типов объектов, которые вы создаете, будут представлять собой классы. Класс Program содержит метод Main. В состав класса Program можно добавить и другие методы или модуль (Module). На практике вы совершенно не обязаны использовать модули, а наоборот, вам следует предпочесть именно классы. Консольное приложение определяет заготовку кода класса, который получает имя Program. В действительности вы можете назвать класс как угодно. Какие бы имена вы не выбирали, желательно, чтобы они несли смысловую нагрузку и указывали на предназначение класса.
Например, если создаваемый класс предназначен для работы с заказчиками, вполне логично назвать его – Customer. Лучше всего, когда класс будет и должен содержать только методы, предназначенные для работы с заказчиками.