Почему статические классы считаются «классами» и «ссылочными типами»?

Сегодня я размышлял о системе типов C # и CIL и начал задумываться, почему статические классы считаются классами. Есть много способов, которыми они на самом деле не являются классами:

«Нормальный» класс может содержать нестатические члены, а статический класс - нет. В этом отношении класс больше похож наструктура чем статический класс, и все же структуры имеют отдельное имя.Вы можете иметь ссылку на экземпляр «нормального» класса, но не статический класс (несмотря на то, что он считается «ссылочным типом»). В этом отношении класс больше похож наинтерфейс чем статический класс, и все же интерфейсы имеют отдельное имя.Имя статического класса никогда не может использоваться в любом месте, где обычно подходит имя типа: вы не можете объявить переменную этого типа, вы не можете использовать ее как базовый тип, и вы не можете использовать его в качестве параметра общего типа. В этом отношении статические классы несколько больше похожиПространства имен.«Нормальный» класс может реализовывать интерфейсы. Еще раз, это делает классы более похожими наСтруктуры чем статические классы.«Нормальный» класс может наследовать от другого класса.

Также странно, что статические классы считаются производными отSystem.Object, Хотя это позволяет им «наследовать» статические методыРавно а такжеReferenceEqualsцель этого наследования сомнительна, так как вы вызываете эти методы наобъект тем не мение. C # даже позволяет вам указывать это бесполезное наследование явно на статических классах, но не на интерфейсах или структурах, где неявное наследование отобъект а такжеSystem.ValueTypeсоответственно на самом деле имеет цель.

Относительно аргумента подмножества функций: Статические классы имеют подмножество признаков классов, но они также имеют подмножество признаков структур. Все вещи, которые отличают класс от других типов, не относятся к статическим классам.

Учитываятип аргумент: Превращение статического класса в новый и другой тип не исключает его использования втип.

Учитывая явную странность статических классов и скудость сходства между ними и «нормальными» классами, не должны ли они быть превращены в отдельный тип типа вместо специального класса?

Ответы на вопрос(10)

Ваш ответ на вопрос