以前就一直知道值类型和引用类型的区别,不过全是在书上或者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上,有这么一段话.足以说明原因.
基于值类型的变量直接包含值。将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。