Является ли статический класс ссылочным типом или типом значения? было бы очень полезно, если бы кто-нибудь дал хорошее объяснение.Является ли Static Class ссылочным типом или типом значения?
ответ
Класс всегда является ссылочным типом независимо от того, является ли он статическим или нестационарным.
Я думаю, что вы имеете в виду члены статического класса .. и они являются типами 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
Типу
Да, статические классы рассматриваются как ссылочные типы, как при изменении значения StaticClass.Property внутри метода, то это изменение будет получить заселена везде ссылки на этот класс. Он имеет только один адрес памяти и не может быть скопирован, так что при вызове другого метода или свойства это новое значение будет преобладать над старым.
Тип значения и ссылки относится к экземплярам типов. Статический класс не может быть создан и, следовательно, этот вопрос не относится к статическим классам.
Статический класс может содержать только статические элементы, а статические члены (например, свойства) создаются один раз для всего приложения, поэтому, если вы меняете его значение, оно изменяется везде в приложении.
Я просто хочу добавить, что статический класс - это класс и тип. Статический конструктор вызывается один раз, поэтому он «создается» CLR в качестве типа, когда сначала «ссылается» в программе, и поэтому является ссылочным типом истинного класса.
Но мне нравится думать о реализации или, скорее, о «использовании» статического класса как о пустом типе или «имени класса», так как на самом деле его доступ к членам и их выполнение. Поэтому подумайте о том, что созданный Static Class является полым указателем на его методы и свойства, а не как указатель на настоящий экземпляр объекта класса, который содержит эти вещи как истинный нестатический класс.
- 1. Является ли объект ссылочным типом или типом значения?
- 2. Строка является ссылочным типом
- 3. Может ли тип быть ссылочным типом и типом значения одновременно?
- 4. jdt: Проверьте, является ли IField ссылочным типом
- 5. Is Guid считается типом значения или ссылочным типом?
- 6. Является статическим булевым ссылочным типом в Swift?
- 7. Разница между ссылочным типом и типом объекта?
- 8. Является ли C# динамическим POD значением или ссылочным типом?
- 9. Является ли «корневым типом» или просто типом?
- 10. Как узнать, какой тип является ссылочным типом или типом значения в Visual Studio
- 11. Является ли массив аргументом в c действительно ссылочным типом?
- 12. Пустой финал с ссылочным типом
- 13. Создание объекта с другим ссылочным типом и типом экземпляра
- 14. Является ли ссылочным типом в C++ тип POD?
- 15. В массиве строк C# отдельные элементы массива являются ссылочным типом или типом значения?
- 16. Действительно запутано между объектом и ссылочным типом
- 17. Как определить, является ли System.Type настраиваемым типом или типом Framework?
- 18. Как определить, является ли объект типом значения
- 19. Если P не является ссылочным типом: если A является ссылочным типом, ref-определитель типа A игнорируется для вывода типа
- 20. Как сделать выражение типа выражения ссылочным типом?
- 21. Ошибка: тип «TEntity» должен быть ссылочным типом
- 22. Необязательный параметр должен быть ссылочным типом
- 23. Является ли массив типом данных?
- 24. Конфликт в том, что объект является ссылочным типом
- 25. Является ли DateTime примитивным типом?
- 26. Как целочисленный массив может быть ссылочным типом?
- 27. Является ли строка [] не типом?
- 28. Как узнать, что-то является структурой (тип значения) или классом (ссылочным типом) в C#
- 29. C++ - экземпляр шаблона со ссылочным типом
- 30. Как будет храниться объект с типом значения и ссылочным типом в .NET?
Наверху статический класс «ни в памяти», поскольку он не может быть создан, поэтому на самом деле невозможно ДЕЛАТЬ ссылку на него. Дело в том, практически спорный вопрос, если вы не можете разумно иметь переменную этого указанного типа. – TomTom
Static - вещь C#, CLR ничего не знает о статичности и с точки зрения CLR, можно было бы создать экземпляр статического класса. – Steven