关于值类型和引用类型


以前就一直知道值类型和引用类型的区别,不过全是在书上或者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上,有这么一段话.足以说明原因.

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

posted on 2006-06-06 10:33  房客  阅读(323)  评论(0编辑  收藏  举报

导航