Что такое класс?

Я могу представить первую реакцию, когда вы прочтете заголовок моего вопроса: как вы можете иметь здесь такую ​​высокую репутацию и игнорировать, что такое класс?

Моя точка зрения такова: до сих пор я всегда работал с C++, Delphi, Java, ... и там все довольно просто: класс - это определение типа объекта. Вам нужно зарезервировать некоторое пространство в памяти, чтобы начать его использовать (отсюда и конструктор), а затем не забудьте освободить эту память (если ваш язык программирования не поддерживает сборку мусора).

Однако сегодня у меня возникла проблема с определениями типов и константами в C#, и я попал на этот URL с указанием таких фрагментов исходного кода:

class Calendar1
{
  public const int Months = 12;
}

Чтобы использовать это, вам просто нужно сделать:

using Calendar1;

И вы можете использовать Months как константу.

Но вот мой вопрос: где конструктор? Если этот класс является определением типа объекта, о каком объекте мы говорим?

Итак, если я правильно понимаю, С# основан на идее Все является классом, но для того, чтобы это работало, изобретатели С# расширили определение класса, так что теперь мы получаем (определение С#):

Класс является одним из следующих:

  • определение типа объекта. В этом случае для создания объекта необходим конструктор.
  • ...

Кто-нибудь может закончить определение?


person Dominique    schedule 28.05.2021    source источник
comment
Я подозреваю, что вы имеете в виду using static Calendar1;, иначе он не скомпилируется. Компилятор предоставляет конструктор, но он вам не нужен, потому что все константы статические — вам не нужен экземпляр Calendar1 для доступа к Months. Вас смущает неявная статическая природа const?   -  person Jon Skeet    schedule 28.05.2021
comment
Возможно, это поможет ?   -  person Guru Stron    schedule 28.05.2021
comment
Вы можете сделать using static Calendar1 только в том случае, если класс является статическим классом. То, что он делает, прекрасно и очень распространено при работе в Entity Framework для dtos и сущностей.   -  person Jeff B    schedule 28.05.2021
comment
"A class is a data structure that may contain data members (constants and fields), function members (methods, properties, events, indexers, operators, instance constructors, destructors and static constructors), and nested types." — из стандарта C# . (Я бы добавил: члены могут быть статическими или нестатическими.)   -  person Matthew Watson    schedule 28.05.2021


Ответы (3)


Это довольно распространенная практика в C#. Классы часто используются для создания мешков для хранения констант или обычно в качестве сущности или объекта dto. Обычно они создаются без пользовательского конструктора. Если у класса нет конструктора, он определяется во время компиляции, что равносильно пустому конструктору:

public Calendar1()
{
}

Этот ответ более подробно описан: класс C# без конструктора

person Jeff B    schedule 28.05.2021

Вам это не нужно using. using — сделать доступными пространства имен.

  • Константа статична. Это означает, что это не член экземпляра, а член типа. Таким образом, вы можете получить к нему доступ через имя типа: Calendar1.Months или, с using static Calendar1;, просто с Months.
  • В C# класс неявно создает общедоступный конструктор без параметров, если вы не объявляете его явно.
person Olivier Jacot-Descombes    schedule 28.05.2021

Когда вы создаете экземпляр класса, вы выделяете память (используя ключевое слово new). Константы создаются не во время выполнения, они создаются во время компиляции и сохраняются в метаданных сборки. Поэтому, когда вы обращаетесь к константе, вы не будете обращаться к экземпляру класса — вы будете напрямую обращаться к константе из метаданных. Взгляните на этот пост: Как члены C# const выделяются в память?

person Fuffelschmerz    schedule 28.05.2021