静态类是引用类型还是值类型?

时间:2012-07-02 12:33:55

标签: c#

静态类是引用类型还是值类型? 如果有人给出一个很好的解释,这将是非常有帮助的

6 个答案:

答案 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一样驻留在堆栈上,但不允许您被复制!