По моему мнению, статические классы рассматриваются так, потому что они могут встраивать частные поля, открытые свойства и методы, хотя они являются статическими, и имеют фиксированное расположение адресов, где каждый вызов метода или свойства singleton будет иметь свою ссылку.
Структура, скорее всего, тип значения, как при написании:
var struct1 = new Struct1();
var struct2 = struct1;
каждое из свойств будет скопировано в новую область памяти. Кроме того, со структурой вы сможете изменить значение struct2.Property1, не меняя его в struct1.Property1.
Для каждой оппозиции классы в моем понимании являются ссылочными типами, например, когда вы пишете:
var class1 = new Class1();
var class2 = class1;
Здесь ссылка скопирована. Это означает, что когда вы изменяете class2.Property1, это же свойство также изменяется в class1.Property1. Это связано с тем, что оба класса указывают на один и тот же адрес памяти.
Что касается статических классов, они рассматриваются как ссылочные типы, так как при изменении значения StaticClass.Property внутри метода это изменение заполняется везде, где вы ссылаетесь на этот класс. Он имеет только один адрес памяти и не может быть скопирован, поэтому при вызове другого метода или свойства это новое значение будет иметь приоритет над старым. Статические классы предназначены для совместного использования во всем приложении, поэтому в вашем приложении существует только одна ссылка на него. Поэтому заставляю их вести себя как класс.
Статический класс, даже если одноэлементный шаблон, я полагаю, не поощряется, за исключением абсолютных целей, может представлять реальный объект точно так же, как класс или экземпляр класса. Однако, поскольку уникальные в мире объекты кажутся достаточно редкими, нам не нужно, чтобы они представляли практический объект, а просто некоторые логические объекты, такие как инструменты и т. Д., Или некоторые другие дорогостоящие объекты. заложить объекты.
EDIT
Фактически, статический класс настолько похож на класс, что в Visual Basic нет статического класса, а есть только класс со статическими членами (Shared в Visual Basic). Единственное, что нужно учесть - сделать этот класс NotInheritable (запечатанным в C #). Таким образом, C # обеспечивает более неявную функциональность, позволяя объявлять класс статическим, а не делать его запечатанным, с пустым конструктором по умолчанию и т. Д. Это какой-то ярлык или синтаксический сахар, как мы хотели бы сказать.
В заключение, я не думаю, что было бы какое-то преимущество или преимущество, если бы для него было новое ключевое слово.