三、类的属性--封装字段
包含两个方法:
1、读访问器:get(取值)
2、写访问器:set(赋值)
///==封装==
private string _Nihao;//原有的普通变量private私有的,通过右键--重构--封装字段实现;
/*{
get{return _Name;}//默认一直存在get和set两个方法,但是一直隐藏信息的特性;
set{_Name = value;}
}*/
//封装字段
public string Name//封装之后的属性,public公共的,
//相当于_Name的传话的中间人,封装之后将原有隐藏的变量属性显示出来,两种方法:get,set。
{
get //读访问器,获取,返回_Name的值,取值的过程
{
return _Nihao;//return的是自身的值
}
set //写访问器,设置name的值赋值给_Name,赋值的过程
{
int sum = 0;
for (int i = 1; i <= 10; i++)
{
sum = sum + i;
}
value = sum.ToString();
_Nihao = value;
}
在主函数中调用:
///==封装==
fengzhuang p = new fengzhuang();//必须要初始化new才能调用
Console.WriteLine("输入:");
p.Name = Console.ReadLine();
Console.WriteLine(p.Name);
Console.ReadLine();
这样就可以返回值了。
四、构造函数
定义:当使用new关键字创建一个对象时,一个特殊的函数被自动调用,这就是类的构造函数。
在C#中,类的构造函数与类名相同,没有返回值。
class student
{
public student()//构造函数的名称同类名,当在主函数调用时,只要初始化new,构造函数就可以被自动调用。
{
方法;
}
}
【习题】
///学生课程,循环输入学生信息,输出平均分,最高分,最低分,排序;(利用面向对象)
Console.Write("请输入学生人数:");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("请输入学生学号,姓名,分数");
ArrayList arr = new ArrayList(); //定义一个集合,
for (int i = 0; i < n; i++)
{
student s = new student();//for循环中每循环一次,必须重新初始化,不然会把之前的赋值替换掉,滞留最后一次赋值
Console.Write("学号:");
s.Code = int.Parse(Console.ReadLine());
Console.Write("姓名:");
s.Name = Console.ReadLine();
Console.Write("分数:");
s.Score = decimal.Parse(Console.ReadLine());
arr.Add(s);//把类的属性全都放在集合中
}
//for循环求总分;
decimal sum = 0;
for (int i = 0; i < n; i++)
{
student avgs = (student)arr[i];//这一步是将集合arr强制转换为student类。
sum += avgs.Score;//求总分
}
//for嵌套循环冒泡排序,求最高分,最低分
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
student s1 = (student)arr[i];//把集合按索引强制转化为student类,并把集合中的数值赋值给s1;
student s2 = (student)arr[j];
if (s1.Score < s2.Score)//根据分数判断大小,按照先大后小的顺序排列
{
student zhong = new student(); //冒泡排序(重点)
zhong = s1;
arr[i] = s2;//表示把较大值,赋值给i索引
arr[j] = zhong;
}
}
}
//打印输出
Console.WriteLine("总分:{0}", sum);
Console.WriteLine("平均分:{0}", sum / n);
student ss1 = (student)arr[0];
Console.WriteLine("姓名:{0}最高分:{1}",ss1.Name,ss1.Score);
int m=n-1;
student ss2 = (student)arr[m];
Console.WriteLine("姓名:{0}最低分:{1}", ss2.Name, ss2.Score);
//按成绩排序,for循环
Console.WriteLine("本班的成绩列表如下:*****************************");
for (int i = 0; i < n; i++)
{
student avgs = (student)arr[i];
Console.WriteLine("名次 学号 姓名 分数");
Console.WriteLine("{0} {1} {2} {3} ",i+1,avgs.Code,avgs.Name,avgs.Score);
}
Console.ReadLine();