1,下面解释属于个人通俗理解版:

值类型:复制的过程只是复制副本,后面改变副本的值,不会对初始值产生影响。

引用类型:这里主要用类变量阐述,如果class var1=new class();和class var2=var1;都是引用的同一类对象var1,那么var2的值改变,var1也会改变。,

2,当值类型中包含引用类型时,依然存在值类型和引用类型的区分。

 class ShapeInfo                 //创建一个引用(类)类型
    {public string infoString;public ShapeInfo(string info)//带参数的构造函数
        {infoString = info;}}struct MyRectangle                     //创建一个值类型(结构类型)
    {public ShapeInfo rectInfo;public int top, left, right, bottom;public MyRectangle(string info){rectInfo = new ShapeInfo(info);//实例化类类型top = left = 11;bottom = right = 110;}}class Program{static void Main(string[] args){Console.WriteLine("创建第一个MyRectangle变量 r1");MyRectangle r1 = new MyRectangle("这是我创建的第一个MyRectangle对象");Console.WriteLine("现在将一个新的MyRectangle赋值给r1");MyRectangle r2 = r1;Console.WriteLine("改变r2的值");r2.rectInfo.infoString = "这是一个新的字符串信息";//改变类对象中的信息字符串值r2.bottom = 120;//改变结构类型中的bottom值Console.WriteLine("改变后的新值:");Console.WriteLine("->r1.rectInfo.infoString:{0}", r1.rectInfo.infoString);Console.WriteLine("->r2.rectInfo.infoString:{0}", r2.rectInfo.infoString);Console.WriteLine("->r1.botton:{0}", r1.bottom);Console.WriteLine("->r2.botton:{0}", r2.bottom);Console.ReadKey();}}

3.按值类型传递引用类型。

  class MyInfo{public string MyName;//定义一个字符串类型变量存储用户姓名public int MyAge;//定义一个整数类型变量存储用户年龄public MyInfo(string name, int age)//创建一个带参数的构造函数
        {MyName = name;MyAge = age;}public MyInfo() { }//默认构造函数public void PrintInfo()//创建一个公有方法输出用户年龄信息
        {Console.WriteLine("{0}年龄是{1}岁", MyName, MyAge);}}class Program{public static void SendAPersonByValue(MyInfo info){info.MyAge = 99;//改变‘info’的年龄info = new MyInfo("顾丽丽", 99);//这里info是不能被重新创建的,因为这个对象已经存在。
        }static void Main(string[] args){//按值传递引用类型Console.WriteLine("输出用户年龄信息:");MyInfo fred = new MyInfo("房大伟", 29);Console.WriteLine("未改变用户信息前");fred.PrintInfo();SendAPersonByValue(fred);Console.WriteLine("改变后的用户年龄信息:");fred.PrintInfo();Console.ReadKey();}}

4,按引用传递引用类型。

 class MyInfo{public string MyName;//定义一个字符串类型变量存储用户姓名public int MyAge;//定义一个整数类型变量存储用户年龄public MyInfo(string name, int age)//创建一个带参数的构造函数
        {MyName = name;MyAge = age;}public MyInfo() { }//默认构造函数public void PrintInfo()//创建一个公有方法输出用户年龄信息
        {Console.WriteLine("{0}年龄是{1}岁", MyName, MyAge);}}class Program{public static void SendAPersonByValue(ref MyInfo info){info.MyAge = 99;//改变'info'的值info = new MyInfo("顾丽丽", 25);//”info”现在指向了堆上的一个新对象,被改变。
        }static void Main(string[] args){Console.WriteLine("输出用户年龄信息:");MyInfo fred = new MyInfo("房大伟", 29);Console.WriteLine("未改变用户信息前");fred.PrintInfo();SendAPersonByValue(ref fred);Console.WriteLine("改变后的用户年龄信息:");fred.PrintInfo();Console.ReadKey();}}

转载于:https://www.cnblogs.com/lilixiang-go/p/4935972.html

值类型和引用类型---深究相关推荐

  1. 值类型和引用类型在栈和堆中的分配

      类型基础及背后的工作原理   数据在内存中的分配与传递    值类型和引用类型它们在内存分配与传递上的区别 内存分配 首先要了解一下内存中栈和堆的概念.     栈(Stack) ##栈是一种先进 ...

  2. 述说C#中的值类型和引用类型的千丝万缕

    关于值类型和引用类型方面的博客和文章可以说是汗牛充栋了,今天无意中又复读了一下这方面的知识,感觉还是有许多新感悟的,就此时间分享一下: CLR支持两种类型:值类型和引用类型,看起来FCL的大多数类型是 ...

  3. Java值类型与引用类型的不同

    [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值,那么调用这个方法是传入的变量的值也将改变. 值类型表示复制一个当前变量传给方法,当你 ...

  4. php引用类型变量,PHP变量的值类型和引用类型

    PHP 变量在内存中保存的并不直接是值的内容而是值的地址.比如: $a = 1; 从表面上看起来似乎是 $a 直接存储了 1 这个值.但是实际情况是,PHP 解释器创建了变量 $a , 将值 1 存入 ...

  5. C#之值类型和引用类型

    本文意在巩固基础知识,并不是对其进行深入剖析,还望理解. 本文是对此项知识的整理文,有些内容来源于网络,其他为博主原创,所以难免会有一些小得瑕疵,敬请谅解. 所有示例均是博主测试过的,如有转载请标明出 ...

  6. 值类型与引用类型的区别

    可以这样理解: 值类型保存的是具体的值 引用类型保存的是值的地址 例如 int a = 1; int b = a; b++; 这时b为2,a仍然是1 再看引用类型,例如有个类型是 User User ...

  7. 第2篇 C#数据类型-值类型与引用类型

    一 C#内存分配 在应用程序与操作系统之间有一个"中间人"--公共语言运行时(Common Language Runtime,CLR).它为应用程序提供内`存管理,线程管理和远程处 ...

  8. 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]

    一.栈和托管堆 通用类型系统(CTS)区分两种基本类型:值类型和引用类型.它们之间的根本区别在于它们在内存中的存储方式..NET使用两种不同的物理内存块来存储数据-栈和托管堆.如下图所示:     值 ...

  9. 理解C#值类型与引用类型(收藏)

    从概念上看,值类型直接存储其值,而引用类型存储对其值的引用.这两种类型存储在内存的不同地方.在C#中,我们必须在设计类型的时候就决定类型实例的行为.这种决定非常重要,用<CLR via C#&g ...

最新文章

  1. 无监督学习多模态融合!腾讯优图联合厦门大学发布2021十大AI趋势
  2. pip19离线_更新pip为20后不显示下载链接无法离线下载回退pip版本
  3. Bootstrap全局css样式_表单
  4. php背景图片 存放位置,CSS中背景图片位置 background-position 的使用方法
  5. 12月4日云栖精选夜读:乌镇AI论坛最全盘点:中国互联网半壁江山坐在了一起,他们怎么看AI...
  6. PAIP.一些流氓软件的流氓营销方法.txt
  7. iSlide2022免费PPT插件(包含众多PPT模板/素材)
  8. 笔记本电脑分屏操作指南
  9. VTM3.0代码阅读:CU、PU、TU
  10. 关于ip、pv、uv的概念
  11. Vmware虚拟机ikuai路由配置
  12. 关于内部排序的小总结
  13. 脉脉行业头条业务的思路猜想
  14. java反射类型转换_Java反射探索研究(转)
  15. 施乐700彩机服务器维修,佳铭办公设备:施乐彩机维修代码
  16. 每日一题——整数除法
  17. 技术分享 | 如何让无人机实现室内自主搜寻?
  18. 移动DRM技术分析与应用策略
  19. Java开发手册-1
  20. 运筹说 第22期 | 对偶理论及其提出者—约翰·冯·诺伊曼

热门文章

  1. Android meta作用,Android中meta-data的使用
  2. 数组|leetcode59.螺旋矩阵II
  3. 微软公司服务器主题软件,微软重大IT升级 七款产品巩固软件帝国
  4. html input 字体颜色_input使用小技巧
  5. php aes 128位加密,php实现AES 128位加密的相关操作技巧分享
  6. linux 清理内存的c函数,Linux C函数之内存配置函数
  7. 计算平均指令时间_为什么向量化计算(vectorization)会这么快?
  8. php通过ajax下载文件,PHP使用ajax的post方式下载excel文件简单示例
  9. goupby 两个值 结果变了_一道问题引出的python中可变数据类型与不可变数据类型...
  10. java post请求 json_好程序员Java教程分享Vue插件之Axios