Я могу представить первую реакцию, когда вы прочтете заголовок моего вопроса: как вы можете иметь здесь такую высокую репутацию и игнорировать, что такое класс?
Моя точка зрения такова: до сих пор я всегда работал с C++, Delphi, Java, ... и там все довольно просто: класс - это определение типа объекта. Вам нужно зарезервировать некоторое пространство в памяти, чтобы начать его использовать (отсюда и конструктор), а затем не забудьте освободить эту память (если ваш язык программирования не поддерживает сборку мусора).
Однако сегодня у меня возникла проблема с определениями типов и константами в C#, и я попал на этот URL с указанием таких фрагментов исходного кода:
class Calendar1
{
public const int Months = 12;
}
Чтобы использовать это, вам просто нужно сделать:
using Calendar1;
И вы можете использовать Months
как константу.
Но вот мой вопрос: где конструктор? Если этот класс является определением типа объекта, о каком объекте мы говорим?
Итак, если я правильно понимаю, С# основан на идее Все является классом, но для того, чтобы это работало, изобретатели С# расширили определение класса, так что теперь мы получаем (определение С#):
Класс является одним из следующих:
- определение типа объекта. В этом случае для создания объекта необходим конструктор.
- ...
Кто-нибудь может закончить определение?
using static Calendar1;
, иначе он не скомпилируется. Компилятор предоставляет конструктор, но он вам не нужен, потому что все константы статические — вам не нужен экземплярCalendar1
для доступа кMonths
. Вас смущает неявная статическая природаconst
? - person Jon Skeet   schedule 28.05.2021using static Calendar1
только в том случае, если класс является статическим классом. То, что он делает, прекрасно и очень распространено при работе в Entity Framework для dtos и сущностей. - person Jeff B   schedule 28.05.2021"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