我需要创建一个应用程序来充当BMI计算器,它收集许多属性,具有匹配的属性来获取和设置这些属性值,并请求许多方法来计算特定数据,例如患者年龄,最大心脏利率,目标利率等。
我的问题主要是关于方法的使用,看看这种用法是正确还是不正确。
我计算年龄的方法如下:
public int Age()
{
DateTime Now = DateTime.Today;
return (Now.Year - DateOfBirth);
}
我不能100%确定是否可以在另一种方法的计算中使用该方法,例如:
public int MaxHeartRate()
{
return (220 - Age());
}
我本可以使用一个属性来执行此操作,但是,该任务要求使用方法来执行计算。
非常感谢任何帮助。我理解方法和属性之间的用法,但是我不清楚在方法中为计算目的调用另一个方法的用法。
答案 0 :(得分:8)
是的,这很好。
但是,你可能有一个错误:
public int Age() {
DateTime Now = DateTime.Today;
return (Now.Year - DateOfBirth);
}
目前尚不清楚DateOfBirth
是什么,但如果它代表出生年份,如果我出生于2011年12月31日,DateTime.Now
是2012年1月1日会发生什么12:00:00.000 AM?
另外,有一点评论,你经常会看到人们把你的方法写成
public int MaxHeartRate() {
return (220 - this.Age());
}
明确我们正在调用实例方法Age
。可读性是编写优秀代码的最重要的一个特性。
答案 1 :(得分:1)
直接回答是肯定的,你可以。
答案 2 :(得分:1)
是的,您的使用是正确的。这实际上非常标准,因为您只能从其他方法中调用方法。我唯一要检查的是:
return (Now.Year - DateOfBirth);
由于DateofBirth是一个日期时间,我不知道这是否会返回一个int。您可能只想检查一下。
答案 3 :(得分:0)
是的,您可以(并且应该!)在您使用该计算值的地方使用Age
方法来计算其他值。
但是,计算年龄的逻辑并不正确。 DateTime.Today
返回一个DateTime
对象,代表(截至撰写本文时)2011年9月16日上午12:00:00。 DateTime.Today.Year
因此将返回2011年。如果我出生于1984年2月,假设DateOfBirth
是我出生的那一年,那么当你在2011年运行它时,这种方法总会返回27,直到你到了1月1,2012年,它将开始返回28。
不要只比较年份 - 比较实际日期,然后取出它们之间TimeSpan
差异的年份部分。
答案 4 :(得分:0)
是的,假设DateOfBirth
返回您想要的内容,您正在做的事情很好。您定义的函数将始终返回int
,因为这是您定义的返回类型。这意味着您可以在任何需要整数的位置使用函数Age()
。
有几个指示可以帮助你开始:
Age()
函数时都会有这样的计算方法。有时这就是你想要的。这是合理的,因为你的年龄可能会改变,但这只是一年一次。你可以想象一个非常复杂的方法,可以做很多繁重的工作。您可能希望将该函数的输出缓存在变量中。Now
的变量DateTime.Today
。然后你用它来找到年份。您只需添加DateTime.Today.Year
而不是创建新变量即可保存步骤。一个小问题。答案 5 :(得分:-1)
你将遇到的问题是Age()函数不是静态的,因此你需要创建和实例,对于那种类型的方法不是你想要的。
如果将Age()定义为:
public static int Age() { }
然后你可以像在MaxHearRate()方法中那样使用它