传递c#的类值?

时间:2013-10-30 17:00:16

标签: c# class

我正在尝试将存储在类中的值传递给程序,但我不确定如何!我觉得我差不多完成了这个程序,但是在运行它时它只显示它在实际程序中写的内容,并且它不显示在类变量上存储值的选项。如果有人能帮助我指导我做错了什么,我将不胜感激。

这是我写的课程。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{
    class Pet
    {
        public string Name;
        public string Type;
        public double Age;

        public string setName()
        {
            Console.WriteLine("Please write your pet's name");
            Name = Console.ReadLine();
            return Name;
        }

        public string setType()
        {
            Console.WriteLine("What type of animal is your pet?");
            Type = Console.ReadLine();
            return Type; 
        }

        public double getAge()
        {
            Console.WriteLine("Input your pet's age"); 
            while(!double.TryParse(Console.ReadLine(), out Age))
                Console.WriteLine("Please enter a valid number");
            return Age;
        }
    }
}

这是实际的程序:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            Pet mypet = new Pet();
            mypet.Name = "";
            mypet.Type = "";
            mypet.Age = 0;

            Console.WriteLine("The name of your pet is:" + mypet.Name);

            Console.WriteLine("The type of animal your pet is:" + mypet.Type);

            Console.WriteLine("The age of your pet is:" + mypet.Age);
        }
    }
}

5 个答案:

答案 0 :(得分:4)

我认为,按照您的代码组织方式,您的程序应如下所示:

class Program
{
    static void Main(string[] args)
    {
        Pet mypet = new Pet();
        mypet.setName()
        mypet.setType();
        mypet.getAge();

        Console.WriteLine("The name of your pet is:" + mypet.Name);
        Console.WriteLine("The type of animal your pet is:" + mypet.Type);
        Console.WriteLine("The age of your pet is:" + mypet.Age);
    }
}

顺便说一句,它可以通过以下方式更加一致地命名您的方法:

PromptName();
PromptType();
PromptAge();

这就是他们实际做的事情。注意UpperCamelCase表示法(http://en.wikipedia.org/wiki/CamelCase),这是编写C#代码时的标准。

答案 1 :(得分:1)

您不是要求输入,只是显示输出。

将您的代码更改为

    static void Main(string[] args)
    {
        Pet mypet = new Pet();

        mypet.setName();
        mypet.setType();
        mypet.getAge();

        Console.WriteLine("The name of your pet is:" + mypet.Name);
        Console.WriteLine("The type of animal your pet is:" + mypet.Type);
        Console.WriteLine("The age of your pet is:" + mypet.Age);

    }

答案 2 :(得分:1)

您的班级定义可能如下所示:

class Pet
{
    public string Name { get; set; }
    public string Type { get; set; }
    public DateTime DateOfBirth { get; set; }
}

您希望使用自动实现的属性而不是公共字段。您也不希望将输入/输出逻辑放入数据类中!这是糟糕的面向对象设计。

您也不应将年龄存储为年数。年龄应以出生日期表示,以便您始终可以计算年龄。这样,如果您将宠物的信息存储在文件中并在一年后加载,您的程序就会知道您的宠物已经大一岁了。

var myPet = new Pet();

Console.WriteLine("Please write your pet's name");
myPet.Name = Console.ReadLine();

Console.WriteLine("The type of animal your pet is:");
myPet.Type = Console.ReadLine();

DateTime dateOfBirth;
string line;

do
{
    Console.WriteLine("The date of birth of your pet:");
    line = Console.ReadLine();
} while(DateTime.TryParse(line, out dateOfBirth);

myPet.DateOfBirth = dateOfBirth;

Console.WriteLine("The name of your pet is:", myPet.Name);
Console.WriteLine("The type of animal your pet is: ", myPet.Type);
Console.WriteLine("The age of your pet is:", GetAge(myPet.DateOfBirth));

您可以按如下方式实现GetAge功能:

public static int GetAge(DateTime birthDate)
{
    DateTime n = DateTime.Now; // To avoid a race condition around midnight
    int age = n.Year - birthDate.Year;

    if (n.Month < birthDate.Month || (n.Month == birthDate.Month && n.Day < birthDate.Day))
    age--;

    return age;
}

答案 3 :(得分:0)

在控制台写入之前,您没有调用mypet.setName(),mypet.setType()和mypet.getAge()。

答案 4 :(得分:0)