C#中关于值类型和引用类型的区别

小声哔哔

一直以来对于值类型与引用类型之间的区别都不是特别清晰,直到踩了坑....
正好最新闲暇,便想着梳理梳理这一两年来遇到的奇葩问题和解决方案,顺便就把它给拎出来记一下,免得以后再摔跤

值类型与引用类型的区别

今天为了说明值类型与引用类型的典型区别,准备把结构体(值类型)和类(引用类型)拉出来溜溜

首先咱们先定义一下

    /// <summary>
    /// 类
    /// </summary>
    class TestClass
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

    /// <summary>
    /// 结构体
    /// </summary>
    struct TestStruct
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

然后咱看代码

    class Program
    {
        static void Main(string[] args)
        {
            //测试引用类型
            TestClass c1 = new TestClass { Id = 0, Name = "未定义" };
            TestClass c2 = c1;//c1给了c2
            c2.Id = 1;c2.Name = "a";
            Console.WriteLine($"c1[{c1.Id},{c1.Name}]");
            //测试值类型
            TestStruct s1 = new TestStruct { Id = 0, Name = "未定义" };
            TestStruct s2 = s1;//s1给了s2
            s2.Id = 2; s2.Name = "b";
            Console.WriteLine($"s1[{s1.Id},{s1.Name}]");
            Console.ReadKey();
        }
    }

最后看结果

结束

好了,结果显而易见,剩下的自己悟吧,遇到这个坑别忘了跳一跳,摔到里面真的挺疼的

原文地址:https://www.cnblogs.com/amber-L/p/11971443.html

时间: 2024-10-10 11:15:36

C#中关于值类型和引用类型的区别的相关文章

C#中的值类型与引用类型

这些天学习C#,看到里面的值类型与引用类型,例如结构是值类型,类是引用类型,然后立马想到了C++中的类,那么C++中的类是什么类型呢,哈哈,忽然间有点迷惑,上网搜了搜还真有很多小伙伴们已经晕进去了,今天就总结一下C#与C++中值类型与引用类型的区别. 其实C#中值类型与引用类型的根本区别就是变量包含的数据在哪个内存区间上,值类型在堆栈中直接包含,引用类型在堆中间接引用,例如,C#中实例化类必需要下面的语法: Class name = newclass(); 很容易看出来,类是在堆中分配的空间,然

JavaScript中的值类型和引用类型

先抛出一个题目,阿里的笔试面试题(很基础,但确实是阿里的笔试题) var a = {"x": 1}; var b = a; a.x = 2; a = {"x": 3}; console.log(b.x); 大家觉得最后在控制台输出的结果是多少? 如果你答案是2,那你就没必要接下去看了.如果不是.那你就接着看下去来解决你的疑惑吧! JavaScript中的值类型和引用类型 在javascript里面有两种变量类型,一种是值类型,一种是引用类型. 值类型:数值.布尔型.

C#中的值类型和引用类型以及堆栈

引用类型如:string,Object,class等总是在从托管堆上分配的,C#中new操作符返回对象的内存地址--也就是指向对象数据的内存地址. 以下是值类型与引用类型的表: 我们来看下面一段代码: 首先在类中声明一个class类,和一个struct结构,如图: 并使用在程序入口调用它们,如图: 现在我们来看一看,它们在内存当中是如何存储的? 从这张图可以看出,class(类)实例化出来的对象,指向了内存堆中分配的空间 struct(结构) 实例化出来的对象,是在内存栈中分配 接下来,我们再来

探索C#中的值类型和引用类型

记得大三上学期上C#课程的时候,老师第一堂课就重点给我们讲了一下C#中的数据类型.我们都知道,C#是一门强类型的高级编程语言,了解它的数据类型是非常有必要的.老师当时给我们列举了很多数据类型,然后问我们哪些是值类型,那些是引用类型.说实话,当时对于这个问题还真是回答不上来,或许可以说是自己没有多少底气回答.虽然大一学C++的时候接触过值类型和引用类型,但是因为没有深究,或者根本没有真正了解他们的区别,以至于在自己写代码时无形当中用到了却还是不了解它们之间的具体区别. 现在大四了,也到了快紧张面试

C#中值类型和引用类型的区别浅记

C#中值类型和引用类型的区别浅记 在C#中,变量的类型分为两种,分别是值类型和引用类型. 值类型的变量直接存储值,说得更具体一些,就是值类型变量在内存中直接存储它们自身的值,如代码所示, int x = 2: 值类型变量x,在内存中的某处直接存储了它自身的值:2. 引用类型的变量存储的是对其对象的引用,更进一步说,就是引用类型变量在内存中直接存储了一个指向它处的引用,而引用所指的对象则保存在引用类型变量所指的内存中.如代码所示, public class Thing { int x; } Thi

C# 中的值类型和引用类型

原文 C# 中的值类型和引用类型 值类型(value type):int,long,float,double,decimal,char,bool 和 struct 统称为值类型.值类型变量声明后,不管是否已经赋值,编译器为其分配内存. 引用类型(reference type):string 和 class统称为引用类型.当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间.当使用 new 创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的

C#中对值类型和引用类型的一点认识

区别值类型和引用类型的重要一点就是值类型赋值的时候是给出一块内存空间,空间里放下要赋给值类型的值.而引用类型是开辟一块内存空间,空间里放下的是要赋给引用类型值的指向地址. 就像一个是复制了银行卡里的现金,你花了你复制的现金,和该银行卡是没有关系的.而引用类型是复制了一个银行卡,此卡为银行卡的副卡,因为他们的指向地址是一样的,所以当你使用副卡 的时候,主卡里的钱也会随之变动. 下面给出一段代码. using System; using System.Collections.Generic; usi

浅谈C#中的值类型和引用类型

在C#中,值类型和引用类型是相当重要的两个概念,必须在设计类型的时候就决定类型实例的行为.如果在编写代码时不能理解引用类型和值类型的区别,那么将会给代码带来不必要的异常.很多人就是因为没有弄清楚这两个概念从而在编程过程中遇到了很多问题,在这里博主浅谈对值类型和引用类型的认识. 首先从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.从而这两种类型存储在内存的不同地方. 其次从内存空间上看,值类型是在栈中操作,而引用类型则在堆中分配存储单元. 栈在编译的时候就分配好内存空间,在代码中有栈的

内存角度看c#中值类型和引用类型的区别(转)

1.    值类型的数据存储在内存的栈中:引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址. 2.     值类型存取速度快,引用类型存取速度慢. 3.     值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用 4.     值类型继承自System.ValueType,引用类型继承自System.Object 5.     栈的内存分配是自动释放:而堆在.NET中会有GC来释放 6.      值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的