这是主程序:
    protected void Button1_Click(object sender, EventArgs e)
    {
        int st_nl;
        C31 new_1 = new C31();
        C31 new_2 = new C31("王同学", new DateTime(1976, 6, 20), "444544197606203999");
        new_1.st_name = "李同学";
        new_1.st_csrq = new DateTime(1987, 3, 22);
        new_1.st_code = "442251198703220658";
        Response.Write("**********第一名学生**********" + "<br/>");
        Response.Write("姓名:" + new_1.st_name + "<br/>");
        Response.Write("出生日期:" + new_1.st_csrq.ToString("yyyy-MM-dd") + "<br/>");
        Response.Write("身份证:" + new_1.st_code + "<br/>");
        Response.Write("入学年龄:" + new_1.st_rsnl.ToString() + "<br/>");//
        st_nl = new_1.pGet_rsnl(new DateTime(2004, 9, 1));
        new_1.Get_Dqnj(st_nl);
        Response.Write("2004年9月1日,该学生年龄为:" + st_nl.ToString() + "<br/>");
        Response.Write("2004年9月1日,该学生就读年级为:" + new_1.st_dqnj + "<br/>");
        Response.Write("**********第二名学生**********" + "<br/>");
        Response.Write("姓名:" + new_2.st_name + "<br/>");
        Response.Write("出生日期:" + new_2.st_csrq.ToString("yyyy-MM-dd") + "<br/>");
        Response.Write("身份证:" + new_2.st_code + "<br/>");        Response.Write("入学年龄:" + new_2.st_rsnl.ToString() + "<br/>");—————————————————— 这一行代码输出入学年龄是0(如果用我自己
                                                                                                         照书打的类)        st_nl = new_2.pGet_rsnl(new DateTime(2004, 9, 1));
        new_2.Get_Dqnj(st_nl);
        Response.Write("2004年9月1日,该学生年龄为:" + st_nl.ToString() + "<br/>");
        Response.Write("2004年9月1日,该学生就读年级为:" + new_2.st_dqnj + "<br/>");
    }

解决方案 »

  1.   

    照书打的类:
    public class C31 
    {
        private DateTime _st_csrq;
        private int _st_rsnl;
        private string _st_dqjd;
    public C31()
    {
    }
        
        public C31 (string nst_name,DateTime nst_csrq,string nst_code)
        {
            st_name = nst_name;
            st_csrq = nst_csrq;
            st_code = nst_code;
        }
        public string st_name
        {
            get;set;
        }
        public int st_rsnl
        {
            get { return _st_rsnl; }
        }
        public string st_dqnj
        {
            get { return _st_dqjd; }
        }
        public DateTime st_csrq 
        {
            get { return _st_csrq; }
            set
            {
                _st_csrq=value;
                _st_rsnl = Get_rsnl();
            }
        }
        private  int Get_rsnl()
        {
            TimeSpan dtime= DateTime.Now-this._st_csrq;
            int tday=(int)dtime.TotalDays ;
            return  (int)tday/365;
        }
        public int pGet_rsnl(DateTime _str_now) 
        {
            TimeSpan dtime = _str_now - this._st_csrq;
            int tday = (int)dtime.TotalDays;
            return (int)tday / 365;
        }
        public void Get_Dqnj (int st_nl)
        {
            string Re_dqnl;
            if (st_nl >= 6 && st_nl <= 11)
                Re_dqnl = "小学";
            else if (st_nl >= 12 && st_nl <= 15)
                Re_dqnl = "中学";
            else if (st_nl >= 16 && st_nl <= 18)
                Re_dqnl = "高中";
            else if (st_nl >= 19 && st_nl <= 23)
                Re_dqnl = "大学";
            else if (st_nl > 23)
                Re_dqnl = "研究生/博士";
            else
                Re_dqnl = "未入学儿童";
            _st_dqjd = Re_dqnl;
        }
        public string st_code 
        {
            get;
            set;
        }
    }
      

  2.   

    书自带光盘写的类,用它运行主程序入学年龄就是32:
    public class C31 
    {
        private DateTime _st_csrq;
        private int _st_rsnl;
        private string _st_dqjd;
    public C31()
    {
    }
        
        public C31 (string nst_name,DateTime nst_csrq,string nst_code)
        {
            st_name = nst_name;
            st_csrq = nst_csrq;
            st_code = nst_code;
        }
        public string st_name
        {
            get;set;
        }
        public int st_rsnl
        {
            get { return _st_rsnl; }
        }
        public string st_dqnj
        {
            get { return _st_dqjd; }
        }
        public DateTime st_csrq 
        {
            get { return _st_csrq; }
            set
            {
                _st_csrq=value;
                _st_rsnl = Get_rsnl();
            }
        }
        private  int Get_rsnl()
        {
            TimeSpan dtime= DateTime.Now-this._st_csrq;
            int tday=(int)dtime.TotalDays ;
            return  (int)tday/365;
        }
        public int pGet_rsnl(DateTime _str_now) 
        {
            TimeSpan dtime = _str_now - this._st_csrq;
            int tday = (int)dtime.TotalDays;
            return (int)tday / 365;
        }
        public void Get_Dqnj (int st_nl)
        {
            string Re_dqnl;
            if (st_nl >= 6 && st_nl <= 11)
                Re_dqnl = "小学";
            else if (st_nl >= 12 && st_nl <= 15)
                Re_dqnl = "中学";
            else if (st_nl >= 16 && st_nl <= 18)
                Re_dqnl = "高中";
            else if (st_nl >= 19 && st_nl <= 23)
                Re_dqnl = "大学";
            else if (st_nl > 23)
                Re_dqnl = "研究生/博士";
            else
                Re_dqnl = "未入学儿童";
            _st_dqjd = Re_dqnl;
        }
        public string st_code 
        {
            get;
            set;
        }
    }
      

  3.   

        public int st_rsnl 
        { 
            get { return _st_rsnl; } 
        } 改为:     public int st_rsnl 
        { 
            get { return _st_rsnl = Get_rsnl(); } 
        } 
      

  4.   

    C# code    public int st_rsnl 
        { 
            get { return _st_rsnl; } 
        } 改为: 
    C# code     public int st_rsnl 
        { 
            get { return _st_rsnl = Get_rsnl(); } 
        } 
      

  5.   

    按照6楼和8楼的方法可以正常运行了,谢谢
    但是,在出生日期属性里已经有了_st_rsnl = Get_rsnl(); 呀,第一个学生入学年龄能正常显示,第二人学生为什么就不行呢?
        public DateTime st_csrq 
        { 
            get { return _st_csrq; } 
            set 
            { 
                _st_csrq=value; 
                _st_rsnl = Get_rsnl(); 
            } 
        } 
      

  6.   

    因为第二名学生直接使用了构造函数设置出生日期:    C31 new_2 = new C31("王同学", new DateTime(1976, 6, 20), "444544197606203999"); 没有使用 st_csrq 属性的 set 方法,所以不会调用 _st_rsnl = Get_rsnl(); 
      

  7.   

        public C31 (string nst_name,DateTime nst_csrq,string nst_code) 
        { 
            st_name = nst_name; 
            st_csrq = nst_csrq;   // 是不是你“照书打的类”中 st_csrq 前多加了个 _ ?
            st_code = nst_code; 
        } 
      

  8.   

    我发重了,上面两个类是一样的,是书自带光盘的类,我自己照书打的类是:
    public class C31
    {
        private string _st_Name;
        private DateTime _st_csrq;
        private string _st_code;
        private int _st_rsnl;//入学年龄
        private string _st_dqjd;//就读年级
        public C31()
        {
        }
    public C31(string nst_name,DateTime nst_csrq,string nst_code)
    {
            _st_Name = nst_name;
            _st_csrq = nst_csrq;
            _st_code = nst_code;
    }
        public string st_name
        {
            get { return _st_Name; }
            set { _st_Name = value; }
        }
        public DateTime st_csrq//在"出生日期"属性里设置"入学年龄"(现在时间-出生日期=入学年龄)
        {
            get { return _st_csrq; }
            set
            {
                _st_csrq = value;
                _st_rsnl = Get_rsnl();//在属性里面调用方法
            }
        }
        private int Get_rsnl()//自定义方法
        {
            TimeSpan dtime = DateTime.Now - this._st_csrq;//(现在时间-出生日期=入学年龄)
            int tday = (int)dtime.Days;
            return (int)tday / 365;
        }
        public string st_code
        {
            get { return _st_code; }
            set { _st_code = value; }
        }
        public int st_rsnl//入学年龄属性
        {
            get { return _st_rsnl = Get_rsnl(); }
        }
        public string st_dqnj//就读年级属性
        {
            get { return _st_dqjd; }
        }
        public int pGet_rsnl(DateTime _str_now)
        {
            TimeSpan dtime = _str_now - this._st_csrq;
            int tday = (int)dtime.TotalDays;
            return (int)tday / 365;
        }
        public void Get_Dqnj(int st_nl)
        {
            string Re_dqnl;
            if (st_nl >= 6 && st_nl <= 11)
                Re_dqnl = "小学";
            else if (st_nl >= 12 && st_nl <= 15)
                Re_dqnl = "中学";
            else if (st_nl >= 16 && st_nl <= 18)
                Re_dqnl = "高中";
            else if (st_nl >= 19 && st_nl <= 23)
                Re_dqnl = "大学";
            else if (st_nl > 23)
                Re_dqnl = "研究生/博士";
            else
                Re_dqnl = "未入学儿童";
            _st_dqjd = Re_dqnl;
        }
    }
    10楼说的好像有道理,但光盘上的第二名学生也直接使用了构造函数设置出生日期:     C31 new_2 = new C31("王同学", new DateTime(1976, 6, 20), "444544197606203999"); 没有使用 st_csrq 属性的 set 方法,为什么就可以显示32岁呢?
      

  9.   

    为什么我这里总是提示
    new_1.st_name ("李同学");
    CS1519: 类、结构或接口成员声明中的标记“(”无效