首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于C#构造函数的疑义。

2012-10-16 
关于C#构造函数的疑问。。最近刚接触C#,有个疑问,请解答,谢谢!C# code都知道一个对象必须先实例化才能用,而

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

热点排行