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

本文关键字:方法 调用 | 更新日期: 2023-09-27 18:08:53

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

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

我计算年龄的方法如下:

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

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

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

我也可以用一个属性来做这件事,但是,赋值需要使用方法来执行计算。

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

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

是的,这很好。

但是,这里可能有一个错误:

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。可读性是编写好代码的最重要的特性之一。

直接回答是可以的。

是的,你的用法是正确的。这实际上是非常标准的,因为你只能从其他方法内部调用方法。我唯一要仔细检查的是:

return (Now.Year - DateOfBirth); 

我不知道这是否会返回一个int或不由于DateofBirth是一个日期时间。你可能需要检查一下

是的,您可以(并且应该!)在使用该计算值来计算其他值的地方使用Age方法。

你计算年龄的逻辑不正确。DateTime.Today返回一个DateTime对象,表示(在撰写本文时)September 16, 2011 at 12:00:00 AM。因此,DateTime.Today.Year将于2011年返回。如果我出生于1984年2月,并且假设DateOfBirth是我出生的年份,那么当您在2011年运行该方法时,该方法将始终返回27,直到您到达2012年1月1日,此时它将开始返回28。

不要只比较年份——要比较实际日期,然后将它们之间的TimeSpan差异的Year部分拉出来。

是的,您正在做的是好的,假设DateOfBirth返回您想要的。您所定义的函数将始终返回一个int,因为这是您所定义的返回类型。这意味着您可以在任何需要整数的地方使用Age()函数。

有几个指针可以帮助你开始:

  • 你提到了这一点,所以我认为你明白了,但一般来说,这可能是存储在变量中的候选。现在的方法是每次调用Age()函数时都会执行一次计算。有时候这就是你想要的。这是合理的,因为你的年龄可能会改变,但那只是一年一次。你可以想象一个非常复杂的方法,它做了很多繁重的工作。您可能希望将该函数的输出缓存到变量中。
  • 你已经定义了一个变量Now,只是得到DateTime.Today。然后用它来找出年份。您可以通过输入DateTime.Today.Year而不是创建一个新变量来节省一个步骤。小问题。

编辑:我的错!这是漫长的一周!正如下面的注释中所提到的,只有当它接受参数时,才能将其设置为静态。

您在这里遇到的问题是Age()函数不是静态的,因此您需要创建一个实例,这对于这种类型的方法来说不是您想要的。

如果你定义Age()为:

public static int Age() { }

然后你可以像在MaxHearRate()方法中那样使用它