【问题标题】:What do I use for args when calling constructor in C#?在 C# 中调用构造函数时,args 使用什么?
【发布时间】:2014-02-04 03:29:04
【问题描述】:

我在介绍课上有一个作业,我需要提示用户输入名字、姓氏、出生年份和当前年份。程序需要将信息连同计算的年龄、最大心率(220 - 年龄)和目标心率范围(50% 到 85%)一起输出给用户。我的类应该有一个接收输入数据作为参数的构造函数。每个属性都应该有 get/sets,并且应该有计算年龄、最大心率和目标范围的属性。这就是我到目前为止所拥有的。我想我已经完成了它的要求,但我不确定调用构造函数时要使用什么参数。或者我在这里误解了一个概念。

提前感谢您的任何建议。

using System;

namespace Assignment2
{
    public class HeartRates
    {
        private string firstname;
        private string lastname;
        private int birthyear;
        private int currentyear;
        private int age;
        private double maxrate;
        private double mintarget;
        private double maxtarget;

        public string Firstname
        {
            get { return firstname; }
            set { firstname = value; }
        }

        public string Lastname
        {
            get { return lastname; }
            set { lastname = value; }
        }

        public int Birthyear
        {
            get { return birthyear; }
            set { birthyear = value; }
        }

        public int Currentyear
        {
            get { return currentyear; }
            set { currentyear = value; }

        }

        public int Age
        {
            get { return currentyear - birthyear; }
            set { age = currentyear - birthyear; }
        }

        public double MaxRate
        {
            get { return 220 - Age; }
            set { maxrate = value; }
        }

        public double MinTarget
        {
            get { return MaxRate * .5; }
            set { mintarget = value; }
        }
        public double MaxTarget
        {
            get { return MaxRate * .85; }
            set { maxtarget = maxrate * .85; }
        }
        public HeartRates(string firstname, string lastname, int birthyear, int currentyear)
        {
            Console.WriteLine("Please enter your first name:");
            this.firstname = Console.ReadLine();
            Console.WriteLine("Please enter your last name:");
            this.lastname = Console.ReadLine();
            Console.WriteLine("Please enter your birth year:");
            this.birthyear = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Please enter the current year:");
            this.currentyear = Convert.ToInt32(Console.ReadLine());
        }
    }

    public class Program
    {
        public static void Main()
        {
            HeartRates newheartrates = new HeartRates();

            Console.WriteLine("Your name is {0} {1}, you were born in {2}, the current year is {3}", newheartrates.Firstname, newheartrates.Lastname, newheartrates.Birthyear, newheartrates.Currentyear);
            Console.WriteLine("Your age is {0}", newheartrates.Age);
            Console.WriteLine("Your maximum heart rate is {0}", newheartrates.MaxRate);
            Console.WriteLine("Your target heart rate range is from {0} to {1}.", newheartrates.MinTarget, newheartrates.MaxTarget);
        }
    }
}

【问题讨论】:

  • 如果您可以使用Console.Readline() 运行您的程序?您想始终使用 args 吗?

标签: c# constructor call readline


【解决方案1】:

你在正确的轨道上,但我认为你有点困惑。

你应该移动这部分

        Console.WriteLine("Please enter your first name:");
        this.firstname = Console.ReadLine();
        Console.WriteLine("Please enter your last name:");
        this.lastname = Console.ReadLine();
        Console.WriteLine("Please enter your birth year:");
        this.birthyear = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Please enter the current year:");
        this.currentyear = Convert.ToInt32(Console.ReadLine());

到你的主要功能。

然后改用你创建的构造函数。

HeartRates newheartrates = new HeartRates(firstname, lastname, birthyear, currentyear);

您所拥有的可能会起作用,但是 1)您没有调用您创建的构造函数,而是调用了没有参数的构造函数。通常不希望用户在您的对象构造函数中输入。在 main 函数中执行此操作并将输入/输出保持在一起更有意义。

希望对您有所帮助,欢迎使用 Stackoverflow。

【讨论】:

    【解决方案2】:

    首先获取用户输入(在您的主方法中,而不是在构造函数中):

    Console.WriteLine("Please enter your first name:");
    string firstname = Console.ReadLine();
    Console.WriteLine("Please enter your last name:");
    string lastname = Console.ReadLine();
    Console.WriteLine("Please enter your birth year:");
    int birthyear = Convert.ToInt32(Console.ReadLine());
    Console.WriteLine("Please enter the current year:");
    int = currentyear = Convert.ToInt32(Console.ReadLine());
    

    然后调用你的构造函数:

    HeartRates newheartrates = new HeartRates(firstname,lastname,birthyear,currentyear);
    

    并更改您的构造函数:

    public HeartRates(string firstname, string lastname, int birthyear, int currentyear)
    {
         this.firstname = firstname;
         this.lastname = lastname;
         this.birthyear = birthyear;
         this.currentyear = currentyear;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 2010-11-29
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多