在方法中调用方法的正确方法

时间:2011-09-16 14:06:28

标签: c#

我需要创建一个应用程序来充当BMI计算器,它收集许多属性,具有匹配的属性来获取和设置这些属性值,并请求许多方法来计算特定数据,例如患者年龄,最大心脏利率,目标利率等。

我的问题主要是关于方法的使用,看看这种用法是正确还是不正确。

我计算年龄的方法如下:

public int Age()
{
   DateTime Now = DateTime.Today;
   return (Now.Year - DateOfBirth);
}

我不能100%确定是否可以在另一种方法的计算中使用该方法,例如:

public int MaxHeartRate()
{
   return (220 - Age());
}

我本可以使用一个属性来执行此操作,但是,该任务要求使用方法来执行计算。

非常感谢任何帮助。我理解方法和属性之间的用法,但是我不清楚在方法中为计算目的调用另一个方法的用法。

6 个答案:

答案 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()方法中那样使用它