第二章 深入C#数据类型
数据类型按存储方式可分为两类:
- 值类型(源于System.ValueType)
- 引用类型(源于System.Object)
结构的定义:
- 结构中可以有字段也可以有方法
- 定义时,结构中的字段不能被赋初值
结构的使用:
- 可以不用new,直接定义结构的对象即可
(前提该属性的类型不是数值类型)
- 声明结构的对象后,必须给结构的成员赋初值
*结构是值类型类是引用类型
结构体中没有默认构造函数,但类中有默认构造函数
装箱和拆箱:
由于装箱和拆箱对系统性能损耗很大,所以在真实的开发中我们尽量避免装箱和拆箱的操作。
值方式参数传递:
在值方式参数传递时,参数可以是引用类型也可以是值类型
*值传递和引用传递判定依据没有ref
- 如果方法的参数类型本身就是引用类型,那么对参数值的修改会永久保存
例如:public void TP(SE se)
{
se.Count++;//真正的修改se对象的Count值
}
- 如果方法的参数类型本身是值类型,又没有ref修饰,那么对参数值的修改,不会永久保存()
- 如果方法的参数类型本身是值类型,但是有ref修饰,那么对象参数值的修改,也会永久保存。
值类型传递 :不带ref的参数传递 SE se
引用类型传递:带ref的参数传递
一道练习题:
题目:项目经理评分
实现思路:1.创建MyOffice项目,创建员工类(SE),项目经理类(PM)
实现代码:
class SE
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Assess { get; set; }
public int Popularity { get; set; }
}
2.创建查看评分窗体(FrmShow),添加定义员工数组,将员工数据绑定到FrmShow窗体的ListView控件上
实现代码:
SE[] se = new SE[3];
private void FrmShow_Load(object sender, EventArgs e)
{
LoadShow();
}
/// <summary>
/// 展示员工信息
/// </summary>
private void LoadShow()
{
se[0] = new SE();
se[0].Id = 111;
se[0].Name = "王小毛";
se[0].Age = 26;
se[1] = new SE();
se[1].Id = 112;
se[1].Name = "周新雨";
se[1].Age = 22;
se[2] = new SE();
se[2].Id = 113;
se[2].Name = "张烨";
se[2].Age = 30;
//绑定到listview控件中
for (int i = 0; i < se.Length; i++)
{
ListViewItem lv = new ListViewItem(se[i].Id.ToString());
lv.SubItems.Add(se[i].Name);
lv.SubItems.Add(se[i].Age.ToString());
lv.SubItems.Add(se[i].Assess);
lv.SubItems.Add(se[i].Popularity.ToString());
this.lvlist.Items.Add(lv);
}
}
3.双击ListView列表,弹出评分窗体(FrmJudge),进行显示
实现代码:
private void FrmJudge_Load(object sender, EventArgs e)
{
this.txtName.Text = itme.SubItems[1].Text;
this.txtAssess.Text = itme.SubItems[3].Text;
this.txtPopularity.Text = itme.SubItems[4].Text;
}
4.项目经理填写评分,评价后,弹出FrmJudge窗体关闭,刷新父窗体FrmShow中的员工信息
实现代码:
/// <summary>
/// 对员工信息修改
/// </summary>
private void ClickUpdate()
{
string assess = this.txtAssess.Text;
string popularity = this.txtPopularity.Text;
itme.SubItems[3].Text = assess;
itme.SubItems[4].Text = popularity;
this.Close();
}
*方法调用
*值类型和引用类型
*对象数组作为参数
*窗体间数据传递