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上,有这么一段话.足以说明原因.

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

  • 相关阅读:
    perl6检测网站CMS脚本(测试代码)
    perl6 struct2-045 EXP
    perl6 单线程破解phpmyadmin脚本
    perl6 登录phpmyadmin
    PHP反序列化漏洞学习
    PHP对象5: define / const /static
    PHP对象4: final 不允许重写方法或不允许继承类
    ISCC之misc复现-High起来!
    宁波市第二届CTF之cripto1
    宁波市第二届CTF部分WP之msc1,msc2
  • 原文地址:https://www.cnblogs.com/sxlfybb/p/418466.html
Copyright © 2011-2022 走看看