我老师是个女老师,
现在有两个字段: private double _allowance; //补贴.
private StuType _studentType; //学生类型.
当学生类型为本科生时,补贴是"50"
当学生类型为研究生时,补贴是"500"
当学生类型为博士时,补贴是"2000"在以上对应的属性中,我老师说,因为学生类型是驱动,所以在"学生类型"字段中设置"补贴"字段.然后我就想不通了,那"补贴"字段是被驱动也是很有礼的...再说,我觉得在"学生类型"属性中设置"补贴"字段的值,貌似有点违反规定了...
现在有两个字段: private double _allowance; //补贴.
private StuType _studentType; //学生类型.
当学生类型为本科生时,补贴是"50"
当学生类型为研究生时,补贴是"500"
当学生类型为博士时,补贴是"2000"在以上对应的属性中,我老师说,因为学生类型是驱动,所以在"学生类型"字段中设置"补贴"字段.然后我就想不通了,那"补贴"字段是被驱动也是很有礼的...再说,我觉得在"学生类型"属性中设置"补贴"字段的值,貌似有点违反规定了...
解决方案 »
- 求高人指点!在C#中在A窗体中定义了Datagridview,如何在B窗体的Datagridview中显示A窗体的Datagridview中所有的列名?
- 对象可以怎么去理解?对象为什么能赋值?,使用对象的好处?
- 请问可以在菜单栏上另写信息吗?
- WINFORM图片保存到SQL以及读取问题~
- 数据传诵
- 一个难题
- 关于拓展的datagridviewcheckboxcolumn的问题求助
- 关于导出excel
- 是高手,就能用c#去掉窗体的关闭按钮???
- 怎样把ServiceDescription类中的数据输出成为wsdl文件?
- 获取文本框可见部分的字符数
- 求助:HttpWebResponse执行GetResponse()失败,408错误
//在"学生类型"属性中设置"补贴"的字段.
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;
}
}
是问应该要两者中的哪一种?
//设计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;
}
}
错了,是这样子的...
但是从面向对象的角度来看
StuType.Undergraduate和StudentType.UndergraduateAllowance这两个东西是业务相关,但是并不属于同一类事物,放到同一个枚举中会让人感觉很怪
最大的问题是,如果不同类别的学生(比如,还有特困生补贴,枚举子还要同时再加两个)
增加了耦合,这是需要避免的
不仅如此,对于这个类的内部实现来说,使用第一种设计,在方法里计算补贴时,可直接使用this._allowance,而不需要去调用this.Allowance属性(方法)导致每次都要做get里的运算
放到静态类中,还不如放到enum中直观,但即便如此,随着学生补贴机制的改变,你的类或者enum都得不停地变化,并且double Allowance get实现还得变化,显著增加了耦合
你只要认识到属性是对字段的封装,疑问自然会消除
public string UserName { get; set; }
public string UserPwd { get; set; }
{
本科生 =50, 研究生= 500, 博士= 2000
}
不建议这类数据放到枚举里
这类数据都是会经常变的
放枚举里面会悲剧的....
没事儿政策一变 补贴变了 你还得改code