日期:2014-05-17  浏览次数:20901 次

关于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; 你试试