Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 静态类是引用类型还是值类型?_C# - Fatal编程技术网

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

C# 静态类是引用类型还是值类型?,c#,C#,静态类是引用类型还是值类型? 如果有人能给出一个很好的解释,那将非常有帮助。类始终是引用类型,无论它是静态的还是非静态的。我认为您所指的是静态类的成员。。如果它们实际上是对象,那么它们就是reference类型,否则它们只是值类型。 据我所知,静态类本身无法传递。 尝试运行此代码 class Program { static void Main(string[] args) { StaticClass.x = 89;

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

类始终是引用类型,无论它是静态的还是非静态的。

我认为您所指的是静态类的成员。。如果它们实际上是对象,那么它们就是
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
编辑:-

但是,如果你深入一点,静态类基本上是一个带有私有构造函数的类,没有与之关联的状态(变量)(与我提供的示例不同)因此,理论上是的,它是一个
引用
类型

是的,静态类被视为引用类型,就像您更改StaticClass时一样。方法中的属性值,此更改将填充到引用该类的任何地方。它只有一个内存地址,无法复制,因此当发生另一个方法或属性调用时,此新值将优先于旧值。

值和引用类型是关于类型的实例。静态类不能实例化,因此这个问题与静态类无关


静态类只能包含静态成员,而静态成员(如属性)只为整个应用程序创建一次,因此,如果更改其值,则应用程序中的所有位置都会更改。

我只想补充一点,静态类既是类也是类型。静态构造函数只被调用一次,因此它在程序中第一次“引用”时由CLR“创建”为一个类型,也是一个真正的类引用类型


但我喜欢将静态类的实现或者更确切地说“使用”看作是空类型或者仅仅是“类名”,因为这才是访问其成员和执行的真正方式。因此,请将创建的静态类视为只指向其方法和属性的空心指针,而不是像真正的非静态类那样指向包含这些内容的实际实例化类对象的指针。

。这个问题毫无意义,但它确实存在于堆栈上,比如structs、int、double,但它不允许复制

最重要的是,静态类“既不在内存中也不在内存中”,因为它不能被实例化,所以实际上不可能保存对它的引用。如果你不能理智地拥有一个上述类型的变量,那么这一点实际上是没有意义的。@Steven你根本不知道你在说什么!