实际上按照顺序不应该写这章,不过我我晚上看桂素伟老师面向对象的讲解视频,有一点小疑问,到现在解决了,我这人挺笨的,赶紧记录下来免得睡一觉又忘记了。
面向对象中,关于类的说法按照我个人理解如下:类就是。。。说不出来了。
反正类里面包括了字段,属性,方法。而且一旦字段定义为私有的,在类外面是无法直接访问的。比如桂素伟老师的年龄,嘿嘿。我以前粗略翻.net书的时候心想,这不是脱了裤子放屁么?定义了又不让访问,搞毛啊!
现在就来看看我领悟了点啥,废话不多说了,直接上代码。
下面的代码实际干了3件事:
1、类中定义了一个私有字段,用来表示本次考试及格成绩线是多少分,这个字段没法在program类中直接调用,实例化后也不行。
2、通过公有字段I提供给老师一个修改及格成绩线的机会,如果你只想扮演学生,屏蔽掉老师修改及格线部分就可以了。
3、提供了一个接口方法调用,帮助学生判断自己究竟考及格了没(难道真有人判断不了?)
class Program
{
static void Main(
string[] args)
{
ABC abc =
new ABC();
//老师修改及格线部分 Console.WriteLine(
"本次考试及格成绩线为:{0}分。请输入修改后的及格线:", abc.I.ToString());
abc.I =
int.Parse(Console.ReadLine());
Console.WriteLine(
"修改成功,目前考试及格成绩线为:{0}分。", abc.I.ToString());
//学生查成绩部分 Console.WriteLine(
"本次考试及格成绩线为:{0}分。请输入你的成绩", abc.I.ToString());
int x =
int.Parse(Console.ReadLine());
abc.chachengji(x);
}
}
//定义成绩线及查询的类 class ABC
{
int i=72;
public int I
{
get {
return i; }
set { i = value; }
}
public void chachengji(
int j)
{
if (j >= i)
{
Console.WriteLine(
"你及格了!");
}
else {
Console.WriteLine(
"不及格!");
};
}
}
抛开上面program类不说,我自己定义了一个类ABC,在这个类中的字段i虽然没有明确定义,但是默认是私有的,也就是说我们即使在program类中实例化了它,也没法访问,赋值。
我们先把它封装起来,提供一个对外访问的接口I,可以用来提取和设定i的值。
public int I
{
get {
return i; }
set { i = value; }
}
奇怪的是vs2008快速版居然不支持鼠标右键封装字段,专业版的右键菜单就有这个选项。。。
提供一个方法,用于判断学生传入的成绩究竟及格不及格
public void chachengji(
int j)
{
if (j >= i)
{
Console.WriteLine(
"你及格了!");
}
else {
Console.WriteLine(
"不及格!");
};
}
之后将ABC在program类中实例化一下,就可以直接通过接口I来获得i的值(使用了 abc.I.ToString()),需要给i赋值的时候直接用abc.I=123;就可以了,大家嘲笑我吧,我从晚上8点开始看视频也没想明白这个问题,直到12点才搞清楚原来这么简单!!!直接赋值就可以了,我一晚上都在和abc.I.?搏斗。
赋值之后i的值就变化了,是圆是扁随你捏,想设置成0分及格也是可以的。
在整个程序中,虽然没有直接访问到私有变量,但是通过类的接口,可以修改也可以访问。同时这个类的功能在其他需要同样功能程序中可以快速调用,只需要知道接口就行了,不用考虑代码,比C的函数简易的多。
不得不承认,光说不练假把式,书上看来看去搞不清楚的东西,自己上手写点代码,一下就分析清楚了。
然后。。。睡觉。