封装字段是如何对属性进行约束的??
下面是我复制的一份代码,请问封装字段是如何约束age的值,不至于不和实际的?
Code:
public class Student
{
public int age;
public string name;
public void say()
{
Console.WriteLine("大家好,我是{0},今年{1}岁",name,age.ToString());
}
}
试着编写测试类,实例化对象,调用其say方法
Code:
Class Test
{
static void Main()
{
Student student = new Student();
student.age = -20;
student.name = "hamber";
student.say();
}
}
输出结果:我是hamber,今年-20岁。
以上的赋值是不符合实际生活的。
这就需要我们对类中的敏感字段进行有效约束,这就用到了C#中的属性.
Code:
public class Student
{
private int age;
public int Age
{
get{return age;}
set{age = value;}
}
public string name;
public void say()
{
Console.WriteLine("大家好,我是{0},今年{1}岁",name,Age.ToString());
}
}
在C#中,我们通常不会直接访问类中的字段,而是通过get和set访问器来访问,这种实现方式我们称为属性。
Code:
private int age;
public int Age
{
get{return age;}
set{age = value;}
}
[解决办法]
你可以在set的时候进行判断,
比如:
set{
if(value<0)
{
return;
}
age=value;
}
[解决办法]
这话相当过头。
通常来说你的业务逻辑规定了必须调用程序进行处理,你就写成属性。如果根本没有规定,你就完全可以写成字段。
有些人在外,每天要洗20遍手。别人问他“你为什么总要洗手啊?”,他说“我就是小时候看到我妈妈每天洗20遍手,所以我也学着这样。终于有一天他去问他妈妈”为什么我小时候您每天洗20遍手呢?“,他妈妈告诉他“因为那个时候你浑身长脓疮,我得不断跟你接触,所以只好洗手。”。
你看,有些人的所谓“洁癖”有一部分就是这样养成的,因为活在“照抄别人”的思路中。
[解决办法]
private int age;
public int Age
{
get{return age;}
set{
if(条件不符)
reutrn
age = value;}
}