关于C#构造函数的疑问。。
最近刚接触C#,有个疑问,请解答,谢谢!
- C# code
都知道一个对象必须先实例化才能用,而在实例化的时候就默认调用了系统的构造函数。现在我自己写构造函数,如//上面的省略class Person{ private int age; //定义一个私有age public int Age //限制age的取值,属性 { get {return age;} set { if (value > 0 && value < 100) age = value; else age = 0; } } ///构造方法 public Person(int MyAge) { this.age = MyAge; //实例化的时候赋初值 } public void Say() { Console.WriteLine("我的年龄是:{0}。", age); }}
//然后在main中调用
- C# code
class Program { static void Main(string[] args) { //构造函数不会访问属性? Person zs = new Person(-10); //调用自定义的构造方法,并赋初值-10 zs.Say(); //然后调用say(),输出的年龄是-10。//问题来了,为什么赋初值的时候,并不去执行属性中的set? Console.ReadKey(); } }
大家明白吗?我的意思就是为什么在初始化的时候,并不调用set属性?如果是这样,我们输入一个错误的值,岂不全错了?
求解。。
[解决办法]
///构造方法
public Person(int MyAge)
{
this.age = MyAge; //实例化的时候赋初值
}
因为你在构造方法中直接给字段赋值,没有经过set属性。。自然不会调用了。
改成this.Age = MyAge;就可以了。
[解决办法]
this.age = MyAge; 这个是访问内部字段,如果你写成
this.Age = MyAge; 你试试