C#——值类型 引用类型
C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型。
C#的引用类型包括:数组,用户定义的类、接口、委托,object,字符串。
通过例子我们来理解两者的区别
(1)修改引用类型(用户自定义的类)的形参来修改实参对象的数据
设计界面:
编写代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace C
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
void change(Student one) //one是引用类型
{
one.name = "黄蓉";
one.age=22;
}
private void button1_Click(object sender, EventArgs e)
{
Student stu = new Student(textBox1 .Text,int.Parse (textBox2 .Text) ); //stu是引用类型
label3.Text = "最初的值:"+stu.getInfo();
change(stu);
label3.Text += "\n调用change方法后的值" + stu.getInfo();
}
}
class Student
{
public string name;
public int age;
public Student(string name,int age)
{
this.name = name;
this.age = age;
}
public string getInfo()
{
return string.Format("姓名:{0} 年龄:{1}",name ,age);
}
}
}
运行结果:
(2)修改值类型(自定义的结构体)的形参来修改实参对象的数据
如果我们将例子中的自定义类class Student 修改为结构体Struct Student我们会发现运行结果
通过例子我们可以知道
(1)引用类型参数总是按引用传递的,不需要使用ref或out关键字(string除外)。
(2)由于stu 和one 都是引用类型(用户自定义的类Student)的数据变量,二者共用同一个内存空间,修改stu的数据信息必然同时修改x的数据信息。
(3)值类型中形参的改变并不影响实参的值,他们处于不同的内存空间