因为用属性赋值的时候有一个判断正整数的逻辑,如果超出范围就抛出异常。
这也是属性的一个作用:做访问器使用,可以过滤非法数据。
用构造函数赋值的时候直接对私有成员进行赋值,没有进行判断。
new Person(-10);直接将-10赋给age字段,age类型为int允许为负
person1.Age = -10;会执行Age属性中的set的代码,显然它会检查范围,异常是 throw new Exception("Warning:The age is not between 0 and 100");抛出的
解决:
1.构造函数中改为对Age赋值,这样会检查范围
2.将age声明为uint类型,这只允许正值
public Person(int newAge)
{
age = newAge;
}
//构造函数,直接对变量age赋值了,没有经过判断
//而person1.Age = -10;则走了属性的set方法,也就是经过了值的判断,所以会抛出异常
public Person(int newAge)
{
age = newAge;
}
是对字段age赋值
而person1.Age = -10
是对属性Age赋值
age可以理解为局部变量
Age可以理解为公开变量