我老师是个女老师,
现在有两个字段: private double _allowance;  //补贴.
        private StuType _studentType;    //学生类型.
当学生类型为本科生时,补贴是"50"
当学生类型为研究生时,补贴是"500"
当学生类型为博士时,补贴是"2000"在以上对应的属性中,我老师说,因为学生类型是驱动,所以在"学生类型"字段中设置"补贴"字段.然后我就想不通了,那"补贴"字段是被驱动也是很有礼的...再说,我觉得在"学生类型"属性中设置"补贴"字段的值,貌似有点违反规定了...

解决方案 »

  1.   

    版主,貌似没有看懂我的意思哦...我不是问这个...是set 和 get而已,//设计1.
    //在"学生类型"属性中设置"补贴"的字段.
     public StuType StudentType {
                set {
                    StuType stuType = (StuType)Enum.Parse(typeof(StuType), Console.ReadLine(), true);
                    if (stuType == StuType.Undergraduate) {
                        this._allowance = 50;
                    }
                }
            }
    //设计2.
    //在"补贴"属性中被驱动设置自己对于的字段.
     public double Allowance {
                get {
                    return this._allowance;
                    if (this._studentType == StuType.Undergraduate) {   //本科生.
                        return StudentType.UndergraduateAllowance;
    }
    }
    是问应该要两者中的哪一种?
      

  2.   


    //设计1.
    //在"学生类型"属性中设置"补贴"的字段.
     public StuType StudentType {
                set {
    //将输入的字符串转换为学生类型.
                    StuType stuType = (StuType)Enum.Parse(typeof(StuType), Console.ReadLine(), true);
                    if (stuType == StuType.Undergraduate) {
                        this._allowance = 50;
                    }
                }
            }
    //设计2.
    //在"补贴"属性中被驱动设置自己对于的字段.
     public double Allowance {
                get {
                    if (this._studentType == StuType.Undergraduate) {   //本科生.
                        return StudentType.UndergraduateAllowance;
    }
    }
    错了,是这样子的...
      

  3.   

    设计1会好点,从调用这个类的Allowance属性来说两者的效果一样
    但是从面向对象的角度来看
    StuType.Undergraduate和StudentType.UndergraduateAllowance这两个东西是业务相关,但是并不属于同一类事物,放到同一个枚举中会让人感觉很怪
    最大的问题是,如果不同类别的学生(比如,还有特困生补贴,枚举子还要同时再加两个)
    增加了耦合,这是需要避免的
    不仅如此,对于这个类的内部实现来说,使用第一种设计,在方法里计算补贴时,可直接使用this._allowance,而不需要去调用this.Allowance属性(方法)导致每次都要做get里的运算
      

  4.   

    不行,貌似"补贴"是只读的...所以不能设置(set)...我还是觉得是不是 设"补贴"为被驱动,也就是说..在"补贴内部自己赋值...比较合理...
      

  5.   

    实际当中StudentType属性可以设计为虚的
      

  6.   

    不是哈,StuType.Undergraduate和StudentType.UndergraduateAllowance这两个东西我是为了以后如果"补贴"变而吧写在属性的对于值也改变...所以就定义成 static类而已,当时觉得定义成 const 和 readonly 不比类成员好...所以就定义成类成员...
      

  7.   


    放到静态类中,还不如放到enum中直观,但即便如此,随着学生补贴机制的改变,你的类或者enum都得不停地变化,并且double Allowance get实现还得变化,显著增加了耦合
    你只要认识到属性是对字段的封装,疑问自然会消除
      

  8.   

     public int UserId { get; set; }
     public string UserName { get; set; }
     public string UserPwd { get; set; }
      

  9.   

    补贴放到枚举里    public enum 补贴
        {
            本科生 =50,        研究生= 500,        博士= 2000
        }
      

  10.   


    不建议这类数据放到枚举里
    这类数据都是会经常变的 
    放枚举里面会悲剧的....
    没事儿政策一变 补贴变了 你还得改code