Какая разница между объектом и классом
Подобный вопрос может служить проверкой Ваших знаний терминологии объектно-ориентированного программирования (object oriented programming, сокращенно OOP). Такой же вопрос можно было бы задать в контексте интервью программиста C++, или любой позиции вакансии, которая требует понимания концепции объектов в программировании.
Термины class и object определенно связаны друг с другом, но каждый из них имеет свой отдельный смысл. Начнем с объяснения смысла термина «class» в контексте OOP. Определение class относится к реально написанной части кода, которая используется для определения поведения любого такого класса. Итак, class это статическая часть кода, состоящая из атрибутов, которые не меняются во время выполнения программы — наподобие определений методов класса.
Объект это экземпляр класса. Однако термин object относится к реально существующему экземпляру класса. Каждый объект должен принадлежать классу. Объекты создаются и уничтожаются в программе по мере необходимости, поэтому их время жизни ограничено. Пока объекты «живые», их свойства могут значительно меняться.
Конкретный пример поможет разобраться в том, о чем тут идет речь. Предположим, что у нас есть класс Animal (животное). Все животные имеют тела и мозги — и поэтому они могли бы быть атрибутами нашего вымышленного класса Animal. Также мы можем добавить к классу некоторые методы, которые общие у всех животных — такие как movement (перемещение), потому что все животные могут двигаться. Идея, которую Вы хотите осуществить в своем представлении, состоит в том, что этот очень общий шаблон Animal не изменяется, он просто дает несколько строк кода, которые определяют класс Animal.
Экземпляр класса Animal был бы определенным животным — львом, кошкой или зеброй. Эти экземпляры класса называются объектами. Принимая во внимание, что класс Animal — общее понятие, экземпляры этого класса — львы, коты и т. д. — берут за основу общее понятие класса и создают его реальные экземпляры.
Именно по этой причине программисты определяют конструкторы в своих классах — так происходит всегда, когда они хотят создавать объект с определенными свойствами. Например, какого вида животное должно быть, как его зовут, сколько оно весит и т. д. Так что Вы можете думать о конструкторе объекта как о чем-то таком, которое вводит класс в жизнь программы — отсюда и пошло название constructor, потому что функция конструктора создает определенный экземпляр класса.
У объектов есть понятие «время жизни», а у класса нет. И как ясно показывает наш пример класса Animal, каждый объект в программе имеет связанный с ним интервал времени жизни — кот или зебра не могут жить вечно. И свойства этих объектов могут меняться в течении их «жизни»; если мы определим переменную size в классе Animal, то она может обозначать размер животного (например, размер кота как объекта со временем может расти).
Общее отличие объекта от класса. Можно сказать, что в то время как класс является общей концепцией предметного понятия (наподобие Animal), объект это очень определенное воплощение этого класса, причем с ограниченным временем жизни в программе. Другой способ думать об отличии между классом и объектом — класс предоставляет шаблон для чего-то более специального, которое должен определить программист при создании объекта этого класса.
[Ссылки]
1. In Java, what’s the difference between an object and a class? site:programmerinterview.com.
Объекты и классы Visual Basic
Объект представляет собой сочетание кода и данных, которое рассматривается как единое целое. Объект может быть частью приложения, как, например, элемент управления или форма. Также объектом может являться само приложение в целом.
При создании приложения в Visual Basic вы постоянно работаете с объектами. Объекты, предоставляемые Visual Basic, такие как элементы управления, формы и объекты доступа к данным. Вы также можете использовать объекты из других приложений в приложении Visual Basic. Вы даже можете создать собственные объекты и определить для них дополнительные свойства и методы. Объекты выполняют функцию готовых блоков для создания программ — вы можете один раз написать фрагмент кода и использовать его многократно.
В этой статье мы подробно расскажем вам про объекты.
Объекты и классы
Каждый объект в Visual Basic определяется классом. Класс описывает переменные, свойства, процедуры и события объекта. Объекты являются экземплярами классов. Определив класс, вы можете создать из него любое количество объектов.
Взаимосвязь между объектом и его классом можно проиллюстрировать на примере печенья и формочки для печенья. Форма для печенья — это класс. Она определяет характеристики каждого печенья, то есть размер и форму. Класс используется для создания объектов. Отдельные печенья — это и есть объекты.
Прежде чем получить доступ к его членам, необходимо создать объект, за исключением Shared членов, к которым можно получить доступ без объекта класса.
Создание объекта из класса
- Определите, из какого класса вы хотите создать объект или определите собственный класс. Например:
Public Class Customer Public Property AccountNumber As Integer End Class
Dim nextCustomer As Customer
Dim nextCustomer As New Customer
nextCustomer.AccountNumber = lastAccountNumber + 1
Всегда, если это возможно, следует объявлять переменную с типом того класса, который будет в ней храниться. Этот принцип называется раннее связывание. Если во время компиляции тип класса не известен, можно использовать позднее связывание, объявив переменную с типом данных объекта. Но помните, что позднее связывание может снижать производительность и ограничивать доступ к членам объекта во время выполнения. Дополнительные сведения см. в статье Object Variable Declaration (Объявление объектной переменной).
Несколько экземпляров
Обычно все только что созданные из класса объекты идентичны друг другу. Но с того момента, когда они возникают как отдельные объекты, их переменные и свойства изменяются независимо от других экземпляров объекта. Например, если вы добавляете в форму три флажка, каждый из объектов флажков является экземпляром класса CheckBox. Отдельные объекты CheckBox имеют одинаковый набор характеристик и возможностей (свойства, переменные, процедуры и события), которые определены в этом классе. Но каждый из объектов имеет собственное имя, каждый можно отдельно включать и отключать, а также перемещать в другое место на форме.
Члены объекта
Объект является элементом приложения и представляет собой экземпляр некоторого класса. Поля, свойства, методы и события являются составными частями объекта, и совокупно именуются членами объекта.
Доступ к членам
Чтобы обратиться к члену объекта, нужно указать имя соответствующей переменной объекта и имя нужного члена, отделив его точкой ( . ). В следующем примере задается свойство Text объекта Label.
warningLabel.Text = "Data not saved"
Список членов IntelliSense
Технология IntelliSense перечисляет члены класса, когда вы обращаетесь к функции списка членов, например вводите точку ( . ) в контексте доступа к члену. Если точка ставится после имени переменной, объявленной как экземпляр некоторого класса, IntelliSense перечисляет все члены экземпляра, но опускает общие члены. Если точка ставится после имени класса, то IntelliSense перечисляет все общие члены, но опускает члены экземпляра. Дополнительные сведения см. в разделе Using IntelliSense.
Поля и свойства
Поля и свойства представляют сведения, содержащиеся в объекте. Их значения можно задавать и получать с помощью инструкций присваивания, так же как для локальных переменных в процедуре. В следующем примере мы получаем значение свойства Width и устанавливаем значение свойства ForeColor для объекта Label.
Dim warningWidth As Integer = warningLabel.Width warningLabel.ForeColor = System.Drawing.Color.Red
Поле можно также называть переменная-член.
Процедуры свойств удобно использовать в следующих случаях.
- Вы хотите контролировать, когда и как значения будут задаваться и извлекаться.
- Свойство имеет строго определенный набор значений, которые требуется проверять.
- Изменение значения приводит к существенному изменению состояния объекта (как, например, значение свойства IsVisible ).
- Изменение значения свойства изменяет другие внутренние переменные или значения других свойств.
- Перед установкой или получением свойства необходимо выполнить определенный набор действий.
Если выполняются следующие условия, можно использовать поля.
- Значение имеет тип, для которого существует встроенная проверка. Например, если присвоить переменной типа Boolean любое значение, кроме True или False , создается ошибка или выполняется автоматическое преобразование данных.
- Допустимым является любое значение из диапазона, поддерживаемого для этого типа данных. Это справедливо для многих свойств с типами Single или Double .
- Свойство имеет тип данных String и не имеет ограничений на размер или значение строки.
- Дополнительные сведения см. в статье Property Procedures (Visual Basic) (Процедуры свойств в Visual Basic).
Всегда сохраняйте закрытые неконстантные поля. Если вы хотите сделать его общедоступным, используйте свойство.
Методы
Действие, которое выполняет объект, называется методом. Например, Add — это метод объекта ComboBox, который добавляет новую запись в поле со списком.
В следующем примере иллюстрируется использование метода Start объекта Timer.
Dim safetyTimer As New System.Windows.Forms.Timer safetyTimer.Start()
По сути метод — это просто процедура, предоставляемая объектом.
Дополнительные сведения см. в разделе Procedures in Visual Basic (Процедуры в Visual Basic).
События
Событие — это действие, распознаваемое объектом, например, щелчок мышью или нажатие клавиши. Вы можете написать код для реагирования на эти события. События могут происходить в результате действий пользователя, выполнения программного кода или изменения состояния системы. Принято говорить, что код, который объявляет о наступлении события, создает это событие, а код, который реагирует на него, обрабатывает событие.
Вы можете разработать собственные события, которые будут создаваться и обрабатываться созданными вами объектами. Дополнительные сведения см. в статье Events (Visual Basic) (События в Visual Basic).
Члены экземпляров и общие члены
Когда вы создаете объект на основе класса, вы получаете экземпляр этого класса. Члены, которые объявлены без ключевого слова Shared, являются членами экземпляра, то есть принадлежат исключительно одному определенному экземпляру. Член экземпляра в одном экземпляре никак не зависит от такого же члена в другом экземпляре того же класса. Например, переменная-член экземпляра может иметь разные значения в разных экземплярах.
Члены, объявленные с ключевым словом Shared , являются общими членами, то есть относятся к классу в целом, а не к отдельному экземпляру. Существует только одна копия каждого общего члена, независимо от количества созданных экземпляров. Общий член определен даже в том случае, если не создано ни одного экземпляра. Например, общая переменная-член имеет только одно значение, которое можно получить из любого фрагмента кода, имеющего доступ к соответствующему классу.
Доступ к не общим членам
- Убедитесь, что объект уже создан на основе нужного класса и сохранен в объектной переменной.
Dim secondForm As New System.Windows.Forms.Form
secondForm.Show()
Доступ к общим членам
- Следуйте имени класса с помощью оператора доступа к члену ( . ), а затем имени члена. К члену объекта, объявленному с ключевым словом Shared , нужно всегда обращаться напрямую через имя класса.
Console.WriteLine("This computer is called " & Environment.MachineName)
Различия между классами и модулями
Основное различие между классами и модулями заключается в том, что для классов можно создавать экземпляры в качестве объектов. Модули таким свойством не обладают. Поскольку все данные стандартного модуля существуют только в одной копии, любые изменения общей переменной стандартного модуля, выполненные в любой части программы, будут влиять на все остальные обращения к значению этой переменной. Данные объекта, наоборот, существуют отдельно для каждого созданного экземпляра объекта. Еще одно важное различие состоит в том, что классы могут реализовывать интерфейсы, а модули — нет. Если класс помечен модификатором MustInherit , его нельзя создать напрямую. Однако он по-прежнему отличается от модуля, так как его можно наследовать, пока модули не могут наследоваться.
Если к члену класса применяется модификатор Shared , он устанавливается для класса в целом, а не для конкретного экземпляра класса. Прямой доступ к члену осуществляется через имя класса, так же как и к членам модуля.
Также классы и модули используют разные области действия для своих членов. Члены, определенные внутри класса, относятся к определенному экземпляру класса и существуют только в то время, когда существует этот объект. Для обращения к членам класса из кода за пределами этого класса следует использовать полные имена в формате Объект.Член.
С другой стороны, все объявленные в модуле члены по умолчанию свободно используются из любого места в коде, откуда есть доступ к этому модулю. Это означает, что переменные стандартного модуля являются фактически глобальными переменными. Они видимы из любой точки проекта и существуют в течение всего времени жизни программы.
Повторное использование классов и объектов
Объекты позволяют один раз объявить переменную или процедуру, а затем использовать ее везде, где потребуется. Например, если в приложении вам нужно средство проверки орфографии, то для него потребуется определить все необходимые переменные и служебные функции. Создав специальный класс для средства проверки орфографии, вы сможете использовать его снова в других приложениях, просто добавив ссылку на скомпилированную сборку. Более того, вы можете сэкономить время и силы, взяв готовый класс проверки орфографии, созданный ранее кем-то другим.
.NET предоставляет множество примеров компонентов, доступных для использования. В следующем примере используется класс TimeZone в пространстве имен System. Члены класса TimeZone позволяют получить сведения о часовом поясе, выбранном на компьютере.
Public Sub ExamineTimeZone() Dim tz As System.TimeZone = System.TimeZone.CurrentTimeZone Dim s As String = "Current time zone is " s &= CStr(tz.GetUtcOffset(Now).Hours) & " hours and " s &= CStr(tz.GetUtcOffset(Now).Minutes) & " minutes " s &= "different from UTC (coordinated universal time)" s &= vbCrLf & "and is currently " If tz.IsDaylightSavingTime(Now) = False Then s &= "not " s &= "on ""summer time""." Console.WriteLine(s) End Sub
В предыдущем примере первый оператор Dim объявляет переменную объекта типа TimeZone и присваивает ей объект TimeZone, который возвращается свойством CurrentTimeZone.
Отношения между объектами
Между объектами могут существовать связи нескольких видов. В первую очередь эти связи подразделяются на иерархию и вложенность.
Иерархические связи
Если классы являются производным от других, более фундаментальных классов, такие отношения именуются иерархической связью. Иерархии классов удобны при описании объектов, являющихся подтипами более общих классов.
Для следующего примера предположим, что нам нужен особый вид объекта Button, который действует как обычная кнопка Button, но в дополнение имеет метод, меняющий местами цвет фона и цвет переднего плана.
Определение класса, производного от уже существующего класса
- С помощью инструкции Class определите класс, из которого вы будете создавать нужный объект.
Public Class ReversibleButton
Inherits System.Windows.Forms.Button
Public Class ReversibleButton Inherits System.Windows.Forms.Button Public Sub ReverseColors() Dim saveColor As System.Drawing.Color = Me.BackColor Me.BackColor = Me.ForeColor Me.ForeColor = saveColor End Sub End Class
Производные классы наследуют члены класса, на котором они основаны, что позволяет постепенно повышать сложность при продвижении по иерархии классов. Дополнительные сведения см. в статье Inheritance Basics (Visual Basic) (Основная информация о наследовании в Visual Basic).
Компиляция кода
Убедитесь, что компилятор сможет получить доступ к классу, на основе которого вы намерены создать новый класс. Возможно, для этого придется указать его полное имя, как в предыдущем примере, или определить его пространства имен в операторе Imports. Если класс находится в другом проекте, может потребоваться ссылка на этот проект. Дополнительные сведения см. в статье Управление ссылками в проекте.
Отношение вложения
Также объекты могут быть связаны отношением вложения. Объекты-контейнеры на логическом уровне содержат в себе другие объекты. Например, объект OperatingSystem логически содержит объект Version, который он возвращает с помощью свойства Version. Важно понимать, что физически объект-контейнер не содержит в себе других объектов.
Коллекции
В качестве примера объектов-контейнеров можно привести коллекции. Коллекции представляют собой группы однотипных перечисляемых объектов. Visual Basic поддерживает определенный синтаксис в for Each. Следующая инструкция, позволяющая выполнять итерацию элементов коллекции. Кроме того, коллекции часто позволяют использовать свойство Item[] для обращения к элементам по индексу или по уникальной строке. Коллекции иногда проще в использовании, чем массивы, поскольку они позволяют добавлять или удалять элементы без использования индексов. Благодаря простоте использования коллекции часто применяются для хранения форм и элементов управления.
Связанные темы
Основы наследования
Описание модификаторов наследования, переопределения методов и свойств, MyClass и MyBase.
Анонимные типы
Описание создания и использования анонимных типов, которые позволяют создавать объекты без определения класса для типа данных.
Инициализаторы объектов: именованные и анонимные типы
Описание инициализаторов объектов, которые позволяют создавать экземпляры именованных и анонимных типов с помощью одного выражения.
Практическое руководство. Выведение имен свойств и типов в объявлениях анонимных типов
Обсуждение имен свойств и типов в контексте объявлений анонимных типов. Содержит примеры успешного и неуспешного вывода.
Обратная связь
Были ли сведения на этой странице полезными?
Различия между классом и объектом?
К своему стыду, внезапно, осознал, что не понимаю разницы между классом и объектом.
Т.е. чисто теоретически понимаю, что объект это экземпляр класса, т.е. класс это как бы заготовка, а уже объект это уже «вещь», с которой можно непосредственно работать.
Но тогда почему (если рассматривать вопрос в PHP), я все-таки могу работать с методами класса ( ClassName::MethodName() ), так же как и с методами объекта ( $c = new ClassName; $c->MethodName() ), хотя, в первом случае никакого объекта не создано.
Или, в данном случае, класс это просто как бы группа глобальных функций в своём «пространстве имен», которые не требуют «персонализации» путем задания уникальных значений их свойств?
Поиск в гугле почему-то не помог, в основном приводятся аналогии вида «Класс — чертежи машины, объект — сама машина», но ни слова о практическом применении.
Заранее благодарен за разъяснения, а то сия каша в голове уже начинает напрягать =)
- Вопрос задан более трёх лет назад
- 60052 просмотра
Комментировать
Решения вопроса 1
Класс = срособ организации полей, методов и пр. = инкапсулированный «кусок» функциональности, описание структуры будущих объектов + своё пространство имён внутри.
Статическая составляющая класса — static-методы и static-поля — это логический способ организации функциональности, общей для любого объекта выделенной сущности. Тут значение имеет логическая составяющая — например, статический метод Parse есть и в классе int, и в классе Guid — но его функциональность различна и соответствует выделенной сущности. Для static-составляющей класса, в принципе, его можно воспринимать как пространство имён. Но пространсто имён нельзя инициализировать, нельзя создать объект пространства имён.
Объект = экземпляр класса = объект, типом которого является какой-то класс = класс после инициализации = сущность в памяти, обладающая поведением, способная изменять своё состояние.
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
Ответы на вопрос 6
Может быть вам легче будет понять, если вы будете думать о классе как о наборе функций, а об объекте как о наборе данных.
Некоторые функции в классе могут быть использованы только с набором данных (т.е. объектом), который передается неявно, когда вы указываете $object->method() .
Другие функции не требуют объекта, поэтому могут быть вызваны напрямую из класса.
С этой точки зрения очень логично выглядит Python, где у любого метода есть явный аргумент self, указывающий на объект, из которого был вызван метод. А запись object.method(5) является краткой записью ObjectClass.method(object, 5) .
Ответ написан более трёх лет назад
Нравится 21 1 комментарий
xinn @xinn Автор вопроса
Отлично! Очень Вам благодарен за ответ, похоже это как раз то, чего мне не хватало.
Я придумал свою дурацкую аналогию.
Класс — это бог, который есть всегда. И бог по образу и подобию своему создаёт экземпляры — человеков. Каждый человек наделён своим набором свойств (рост, вес, . ) и методов (плавать, ходить, летать, . ). А бог в свою очередь наделён общими для всех методами: принимать мольбы, карать, посылать манну небесную и сотворить чудо. Эти методы могут быть приватными. Т.е. бог например может принимать мольбы только людей, а не марсиан. А вот сотворить чудо может как для людей, так и для марсиан — ему не жалко.
Ответ написан более трёх лет назад
Комментировать
Нравится 17 Комментировать

Класс — чертеж, объект класса — машина, собранная по этому чертежу.
Статический метод — это некое устройство (пусть в нашем случае будет GPS-навигатор), которое поставляется вместе с чертежом и представлено в каждой машине, построенной по этому чертежу. Устройство это никак не задействует машину, и работает само по себе.
Вы можете бегать с GPS навигатором не построив машины.
Если отойти от популярного изложения, то статические методы не связываются с экземплярами классов. И могут быть вызваны независимо от того создан экземпляр класса или нет.
Ответ написан более трёх лет назад
Нравится 3 2 комментария
xinn @xinn Автор вопроса
Т.е. я немного прав проводя аналогию с «группой глобальных функций» касаемо статических методов/свойств и классов?

Набор статических методов и свойств может быть рассмотрен как набор глобальных функций и глобальных переменных, которые не требуют создания экземпляра класса, так как в нём не нуждаются.
Chvanikoff @Chvanikoff
Без реализации класса (создания объекта) Вы можете работать только со статическими методами/свойствами класса. Если на примере упомянутой машины — класс описывает, что это такое, а реализация (instance) класса — соответственно, реализовывает какую-то конкретную машину.
Простейший миниатюрный пример:
class Car < public $brand = NULL; >$car = new Car; $car->brand = 'VW'; $car2 = new Car; $car2->brand = 'Жигули';
В итоге у нас 2 машины — VW и Жигули. Обе — экземпляры класса машина (Car). Без создания экземпляра класса Вы не зададите брэнд — нечему его задавать, собственно.
Ну это если примитивы на пальцах.
А вообще — вот, держите: про ООП на php.su
Ответ написан более трёх лет назад
Нравится 2 1 комментарий
xinn @xinn Автор вопроса
Видно я не совсем корректно составил вопрос: то, что Вы написали и есть то, что гуглится с легкостью, и приведенную Вами ссылку я, конечно же, посещал ранее и чего надеялся избежать в ответах.
Спасибо за разъяснение насчет статических методов.
В самом простом случае: Класс — это определение общего поведения для объектов, который этот класс порождает. Объект будет иметь поведение задаваемое этим классом и отличаться от других объектов своим состоянием (ну а если состояние одинаково, то просто это будет как два одинаковых автомобиля — сущностей две разные, но выглядят одинаково ).
Далее, к классу можно добавить статические методы и поля. Здесь уже сам класс будет иметь возжность хранить свое состояние и выполнять действия. В большинстве случаев (но не во всех) это требуется для контроля над производством объектов этого класса (паттерн Синглетон, Фабрика и т.п.).
Еще далее, в объекто-ориентированных языка, все является объектом, поэтому класс тоже может являться объектом. Это нужно для того, чтобы контролировать уже сами классы, подгружать их во время работы программы или ее старта и т.п.
Все это понимание придет с опытом написания программ, просто нужно думать метафорами.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Алексей Сидоров @Gorthauer87
Программист
Всё просто. В случае класса это просто некое описание методов, полей и т.д. Когда мы вызываем любой метод класса, то в аргументах мы неявно передаем указатель this.
То есть в реальности вызов
a->b(arg);
выглядит как
b(arg,a);
А static методы они отличаются от обычных тем, что у них нету этого неявного аргумента this
Ответ написан более трёх лет назад
В php у static методов есть неявные «аргументы» (вообще ключевые слова, равно как и this) self и parent. В python аналогичные аргументы вообще явные, чисто по соглашениям их называют self для методов объектов и class для методов класса, а вообще возможно называть как угодно.
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- JavaScript
- +4 ещё
Что за файл и что в нем?
- 1 подписчик
- час назад
- 54 просмотра
Классы, структуры и пространства имен
C# является полноценным объектно-ориентированным языком. Это значит, что программу на C# можно представить в виде взаимосвязанных взаимодействующих между собой объектов.
Описанием объекта является класс , а объект представляет экземпляр этого класса. Можно еще провести следующую аналогию. У нас у всех есть некоторое представление о человеке, у которого есть имя, возраст, какие-то другие характеристики. То есть некоторый шаблон — этот шаблон можно назвать классом. Конкретное воплощение этого шаблона может отличаться, например, одни люди имеют одно имя, другие — другое имя. И реально существующий человек (фактически экземпляр данного класса) будет представлять объект этого класса.
В принципе ранее уже использовались классы. Например, тип string , который представляет строку, фактически является классом. Или, например, класс Console , у которого метод WriteLine() выводит на консоль некоторую информацию. Теперь же посмотрим, как мы можем определять свои собственные классы.
По сути класс представляет новый тип, который определяется пользователем. Класс определяется с помощью ключевого слова сlass :
class название_класса < // содержимое класса >
После слова class идет имя класса и далее в фигурных скобках идет собственно содержимое класса. Например, определим в файле Program.cs класс Person, который будет представлять человека:
class Person

Начиная с версии C# 12, если класс имеет пустое определение, то фигурные скобки после названия типа можно не использовать:
class Person;
Однако такой класс не особо показателен, поэтому добавим в него некоторую функциональность.
Поля и методы класса
Класс может хранить некоторые данные. Для хранения данных в классе применяются поля . По сути поля класса — это переменные, определенные на уровне класса.
Кроме того, класс может определять некоторое поведение или выполняемые действия. Для определения поведения в классе применяются методы.
Итак, добавим в класс Person поля и методы:
class Person < public string name = "Undefined"; // имя public int age; // возраст public void Print() < Console.WriteLine($"Имя: Возраст: "); > >
В данном случае в классе Person определено поле name , которое хранит имя, и поле age , которое хранит возраст человека. В отличие от переменных, определенных в методах, поля класса могут иметь модификаторы, которые указываются перед полем. Так, в данном случае, чтобы все поля были доступны вне класса Person поля определены с модификатором public .
При определении полей мы можем присвоить им некоторые значения, как в примере выше в случае переменной name . Если поля класса не инициализированы, то они получают значения по умолчанию. Для переменных числовых типов это число 0.
Также в классе Person определен метод Print() . Методы класса имеют доступ к его поля, и в данном случае обращаемся к полям класса name и age для вывода их значения на консоль. И чтобы этот метод был виден вне класса, он также определен с модификатором public .
Создание объекта класса
После определения класса мы можем создавать его объекты. Для создания объекта применяются конструкторы . По сути конструкторы представляют специальные методы, которые называются так же как и класс, и которые вызываются при создании нового объекта класса и выполняют инициализацию объекта. Общий синтаксис вызова конструктора:
new конструктор_класса(параметры_конструктора);
Сначала идет оператор new , который выделяет память для объекта, а после него идет вызов конструктора .
Конструктор по умолчанию
Если в классе не определено ни одного конструктора (как в случае с нашим классом Person), то для этого класса автоматически создается пустой конструктор по умолчанию, который не принимает никаких параметров.
Теперь создадим объект класса Person:
Person tom = new Person(); // создание объекта класса Person // определение класса Person class Person < public string name = "Undefined"; public int age; public void Print() < Console.WriteLine($"Имя: Возраст: "); > >

Для создания объекта Person используется выражение new Person() . В итоге после выполнения данного выражения в памяти будет выделен участок, где будут храниться все данные объекта Person. А переменная tom получит ссылку на созданный объект, и через эту переменную мы можем использовать данный объект и обращаться к его функциональности.
Обращение к функциональности класса
Для обращения к функциональности класса — полям, методам (а также другим элементам класса) применяется точечная нотация точки — после объекта класса ставится точка, а затем элемент класса:
объект.поле_класса объект.метод_класса(параметры_метода)
Например, обратимся к полям и методам объекта Person:
Person tom = new Person(); // создание объекта класса Person // Получаем значение полей в переменные string personName = tom.name; int personAge = tom.age; Console.WriteLine($"Имя: Возраст "); // Имя: Undefined Возраст: 0 // устанавливаем новые значения полей tom.name = "Tom"; tom.age = 37; // обращаемся к методу Print tom.Print(); // Имя: Tom Возраст: 37 class Person < public string name = "Undefined"; public int age; public void Print() < Console.WriteLine($"Имя: Возраст: "); > >
Консольный вывод данной программы:
Имя: Undefined Возраст: 0 Имя: Tom Возраст: 37
Добавление класса
Обычно классы помещаются в отдельные файлы. Нередко для одного класса предназначен один файл. Если мы работаем над проектом вне среды Visual Studio, используя .NET CLI, то нам достаточно добавить новый файл класса в папку проекта. Например, добавим новый файл, который назовем Person.cs и в котором определим следующий код:
class Person < public string name = "Undefined"; public void Print() < Console.WriteLine($"Person "); > >
Здесь определен класс Person с одним полем name и методом Print.
В файле Program.cs , который представляет основной файл программы используем класс Person:
Person tom = new Person(); tom.name = "Tom"; tom.Print(); // Person Tom

Visual Studio предоставляет по умолчанию встроенные шаблоны для добвления класса. Для добавления класса нажмем в Visual Studio правой кнопкой мыши на название проекта:

В появившемся контекстном меню выберем пункт Add -> New Item. (или Add -> Class. )
В открывшемся окне добавления нового элемента убедимся, что в центральной части с шаблонами элементов у нас выбран пункт Class . А внизу окна в поле Name введем название добавляемого класса — пусть он будет назваться Person :

В качестве названия класса можно вводить как Person, так и Person.cs. И после нажатия на кнопку добавления в проект будет добавлен новый класс, в котором можно определить тот же код и также использовать в файле Program.cs.
Таким образом, мы можем определять классы в отдельных файлах и использовать их в программе.