2012-07-02 2 views

ответ

14

Класс всегда является ссылочным типом независимо от того, является ли он статическим или нестационарным.

+5

Наверху статический класс «ни в памяти», поскольку он не может быть создан, поэтому на самом деле невозможно ДЕЛАТЬ ссылку на него. Дело в том, практически спорный вопрос, если вы не можете разумно иметь переменную этого указанного типа. – TomTom

+2

Static - вещь C#, CLR ничего не знает о статичности и с точки зрения CLR, можно было бы создать экземпляр статического класса. – Steven

1

Я думаю, что вы имеете в виду члены статического класса .. и они являются типами reference, если они фактически являются объектами, иначе они являются просто типами значений. статический класс не может быть передан, как я знаю. попробуйте запустить этот код

class Program 
    { 
     static void Main(string[] args) 
     { 
      StaticClass.x = 89; 
      Console.WriteLine(StaticClass.x); 
      changeValue(StaticClass.x); 
      Console.WriteLine(StaticClass.x); 
      Console.ReadKey(); 
     } 
     static void changeValue(int x) 
     { 
      x = x + 1; 
     } 
    } 
{ 
    public static class StaticClass 
    { 
     public static int x { get; set; } 
    } 
} 

EDIT: -
выход 89 в обоих случаях
EDIT: -
и до сих пор, если копнуть немного глубокий статический класс в основном класс с частным конструктор и никакое состояние (переменные), связанные с ним (в отличие от примера, который я предоставил). так YES в теории это reference Типу

0

Да, статические классы рассматриваются как ссылочные типы, как при изменении значения StaticClass.Property внутри метода, то это изменение будет получить заселена везде ссылки на этот класс. Он имеет только один адрес памяти и не может быть скопирован, так что при вызове другого метода или свойства это новое значение будет преобладать над старым.

1

Тип значения и ссылки относится к экземплярам типов. Статический класс не может быть создан и, следовательно, этот вопрос не относится к статическим классам.

Статический класс может содержать только статические элементы, а статические члены (например, свойства) создаются один раз для всего приложения, поэтому, если вы меняете его значение, оно изменяется везде в приложении.

0

Я просто хочу добавить, что статический класс - это класс и тип. Статический конструктор вызывается один раз, поэтому он «создается» CLR в качестве типа, когда сначала «ссылается» в программе, и поэтому является ссылочным типом истинного класса.

Но мне нравится думать о реализации или, скорее, о «использовании» статического класса как о пустом типе или «имени класса», так как на самом деле его доступ к членам и их выполнение. Поэтому подумайте о том, что созданный Static Class является полым указателем на его методы и свойства, а не как указатель на настоящий экземпляр объекта класса, который содержит эти вещи как истинный нестатический класс.

Смежные вопросы