4

(我刚接触到 C# 编码的世界。)我目前正在尝试使用 C# 语言中的函数。该程序的目标是尝试使用total distance traveled和来计算平均值,total hours traveled并且将乘以从 NY 市到 MIAMI 的时间,得到从 NY 市到 MIAMI 的距离。

我怎样才能正确地构建功能(内容明智)来给我结果(从纽约市到迈阿密的距离)?我应该创建函数double void并将它们声明为公共还是私有?

4个文本框:

Starting Mileage
Ending Mileage
Total Driving Time 
Time from NY city to MIAMI

我已经放置了我的功能,这些功能将通过单击按钮来执行。我计划如何使用这些功能的简要想法:

 private void button1_Click(object sender, EventArgs e)
        {
            double v = Calculate_Velocity();
            double t = Get_Time();
            double d = Calculate_Distance (v,t);
            Display_Results(v, t, d);
            Clear_TextBoxes();


        }
4

4 回答 4

3

您需要将函数设为私有或受保护。private 和 protected 的区别在于 private 只能被类或结构中的代码访问,而 protected 只能在当前类以及从它派生的任何类中使用。

这是 CSharp 中访问修饰符的一个很好的解释的链接。

您的代码应如下所示:

private double CalculateVelocity()
{
    double distance = 0;
    double time = 0;

    if(double.TryParse(tbDistance.Text, out distance) &&
       double.TryParse(tbTime.Text, out time))
    {
        return distance/time;
    }

    return 0.0;
}

private double GetTime()
{
    //Get Time
}

private double CalculateDistance(double velocity, double time)
{
    //Calculate Distance
}

private double DisplayResults(double velocity, double time, double distance)
{
    //Display Results
}

private double ClearTextboxes()
{
    //Clear textboxes
}

private void button1_Click(object sender, EventArgs e)
{
    //You get the idea
}

由于您是 csharp 的新手,这可能是尝试使用属性的好时机。例如 GetTime 可以这样写:

// Property to GetTime
public double GetTime
{ 
      get
      {
          // variable to hold time
          double time = double.MinValue;

          // Safely parse the text into a double
          if(double.TryParse(tbTime.Text, out time))
          {
              return time;
          }

          // Could just as easily return time here   
          return double.MinValue;
      }
      set
      {
          // Set tbTime
          tbTime.Text = value.ToString();
      }
}

您可以像这样使用该属性:

double time = GetTime;

或者

GetTime = time;

您也可以考虑使用 TimeSpan 而不是 GetTime 的 double。

于 2012-09-25T04:02:04.533 回答
2

我怎样才能正确地构建功能(内容明智)来给我结果(从纽约市到迈阿密的距离)?

首先,没有绝对正确的答案,每个人都会有自己的看法。在我看来,我建议在你的项目中添加一个新类。

class Formulas
{
    public static double CalculateVelocityFromMileage(double startMileage, double endMileage, double time)
    {
        return (endMileage - startMileage) / time;
    }
}

这将计算速度、距离、平均时间到一个单独的地方的逻辑隔离开来,并且它不假设您命名您的 TextBox 控件或用户应该如何在这些文本框中输入信息。

您应该将这些函数设为静态。您应该将静态函数视为仅需要函数定义中提供的输入的函数。静态函数是一件好事,它不依赖于在调用函数的人看来隐藏的项目。当然,对于静态函数,你别无选择,只能返回 double。

你应该公开这个函数,这样你的点击事件中的代码可以这样调用它:

Formulas.CalculateVelocityFromMileage(start, end, time);

请记住以下几点:
1. 一个函数应该做一件事并做好一件事
2. 一个函数不应该依赖隐藏值,它的输出应该只依赖于它的参数。

您可能会发现自己编写了更多代码,但是随着应用程序的增长,当您开始编写更多代码时,您会感谢自己。

但是相信你自己的直觉,找到你自己的个人风格,发现什么对你有用。

于 2012-09-25T03:51:04.660 回答
0

因为我不知道公式,我只会给你想法,你可以相应地构建应用程序

只需将类内的函数定义为

double i=0;
public double Calculate_Velocity()
{
    i=double.parse(Starting Mileage.Text)*double.parse(TotalDrivingTime.Text );
    return i;   
    //Formula may be wrong but you will get idea abt the things...
}

同样定义所有功能...

于 2012-09-25T03:14:29.827 回答
0

如果您想要小数英里,那么选择double很好。如果您想要返回 1500 或 1837 英里的结果,那么int就是要走的路。通过声明它double,您将得到 1500.33 英里(即 1500 英里和 1/3 英里)的结果。因此,如果您想要分数英里(更精确)或整数英里,您可以自行选择。

对于您的程序,我会制作函数private. 制作它们private意味着不能通过实例化类的实例来调用函数。换句话说,最终用户只想要最终结果。最终用户没有任何业务调用您的“帮助”功能。

仅供参考,您没有问,但还有第三个可见性选项,称为protected. Protected就像private. 不同之处在于,如果您的类被另一个类继承,则该类可以访问您的受保护函数和变量。

于 2012-09-25T03:15:34.753 回答