静态类是引用类型还是值类型? 如果有人给出一个很好的解释,这将是非常有帮助的
答案 0 :(得分:14)
Class始终是一种引用类型,无论它是静态的还是非静态的。
答案 1 :(得分: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; }
}
}
编辑: -
两种情况下的输出均为89
编辑: -
而且如果你深入挖掘静态类基本上是一个带有私有构造函数的类,并且没有与之关联的状态(变量)(与我提供的示例不同)。 所以理论上它是reference
类型
答案 2 :(得分:1)
值和引用类型是关于类型的实例。静态类无法实例化,因此这个问题与静态类无关。
静态类只能包含静态成员,并且为整个应用程序创建一次静态成员(如属性),因此如果更改其值,它将在应用程序的任何位置更改。
答案 3 :(得分:1)
我只想补充说静态类既是Class又是Type。静态构造函数被调用一次,因此当程序中第一个“引用”时,CLR将其“创建”为类型,因此是真正的类引用类型。
但我喜欢将静态类的实现或更确切地说“使用”作为空类型或“类名”,因为它实际上是如何访问其成员以及它的执行方式。因此,将创建的静态类视为仅指向其方法和属性的空心指针,而不是指向包含真实非静态类的真实实例化类对象的指针。
答案 4 :(得分:0)
是的,静态类被视为引用类型,因为当您更改方法中的StaticClass.Property值时,此更改将在您引用此类的任何位置填充。它只有一个内存地址且无法复制,因此当发生另一个方法或属性调用时,这个新值将优先于旧值。
答案 5 :(得分:0)
它们都不是,因为您不能将其复制为值类型,也无法将其实例化为引用类型。这个问题没有道理,但它确实像structs,int,double一样驻留在堆栈上,但不允许您被复制!