zoukankan      html  css  js  c++  java
  • 关于值类型和引用类型


    以前就一直知道值类型和引用类型的区别,不过全是在书上或者MSDN上面看到的.一直没有亲手实践过.
    前一段时间一个同事,在对一个checkbox数组进行操作的时候出现了一些问题.今天偶尔想起,就专门做了一个这样的例子测试一下.
    首先先自己定义一个只包含有一个字段(在C#方面教程书上叫域?)的类

            class RefType

            {

                public int x;

            }

    只所以要自定一个类,而不直接使用string类(string也是引用类型)还是有原因的,但不属于今天讨论的范围就不说了
            private void button1_Click(object sender, EventArgs e)

            {

                MessageBox.Show("Start Boolen");

                Boolean b_T = false;

                Boolean b_O = b_T;

                MessageBox.Show("改变前" + b_O.ToString());

                b_T = true;

                MessageBox.Show("改变后" + b_O.ToString());

     

                MessageBox.Show("Start Class");

                RefType str1 = new RefType();

                str1.x = 100;

                RefType str2 = str1;

                MessageBox.Show("改变后" + "改变前" + str2.x.ToString());

                str1.x = 150;

                MessageBox.Show(str2.x.ToString());

            }

    bool是一个结构,可以代表值类型(结构和枚举都属于值类型),运行之后,你就会发现其中的奥妙.


    另外,在窗体上面再画两个checkbox,再在上面的按钮事件中,加入以下代码 :

                Boolean b_x = false;

                checkBox1.Checked = b_x;

                checkBox2 = checkBox1;

                checkBox2.Checked = true;

    然后,再运行 ,我们会发现,点击之后,只是其中的一个checkbox状态发生了改变,而另外一个则不会变动.

    在MSDN上,有这么一段话.足以说明原因.

    基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。

  • 相关阅读:
    python+selenium 定位隐藏元素
    数据库的几种去重方法总结
    用例设计方法与测试实践相结合思路
    边界值分析法
    等价类分析法
    CYQ.Data 支持分布式数据库(主从备)高可用及负载调试
    linux下rpm包安装、配置和卸载mysq
    linux命令 rpm
    Linux命令之rpm
    Linux rpm命令详解
  • 原文地址:https://www.cnblogs.com/sxlfybb/p/418466.html
Copyright © 2011-2022 走看看