C# 需要一些C的重载信息吗#

C# 需要一些C的重载信息吗#,c#,overloading,C#,Overloading,我有以下问题,想看看是否有人可以帮助我。详细信息在代码中,但我试图重载构造函数,参数名给了我一个错误: using system //blah, blah blah class Animal { private string name; private string race; private double _weight; private double _a

我有以下问题,想看看是否有人可以帮助我。详细信息在代码中,但我试图重载构造函数,参数名给了我一个错误:

using system
    //blah, blah blah

        class Animal
        {
            private string name;
            private string race;
            private double _weight;
            private double _age;


        public Animal(string n,string r, double a, double w)
        {
            name = n;
            race = r;
            age = a;
            weight = w;
        }

            public double age
            {
                get
                {
                    return _age;
                }
                set
                {
                    if (value > 0 && value <= 25)
                    {
                        _age = value;
                    }
                    else
                    {
                        do
                        {
                            Console.WriteLine("Invalid Age!\nDog's age: " + value);
                            Console.Write("Please enter dog's age: ");
                            age = double.Parse(Console.ReadLine());

                        } while (_age < 0 && age > 25);
                    }
                }
            }
            public double weight
            {

                get
                {
                    return _weight;
                }
                set
                {
                    if (value > 0 && value <= 60)
                    {
                        _weight = value;
                    }
                    else
                    {
                        do
                        {
                            Console.WriteLine("Invalid Weight!\nDog's weight: " + value);
                            Console.Write("Please enter dog's weight: ");
                            weight = double.Parse(Console.ReadLine());
                        } while (_weight < 0 && _weight >= 60);
                    }
                }
            }

            public Animal()
            {
                Console.WriteLine("Invalid Age!" + "\nInvalid Weight!");
                Console.Write("\nInformation for the 1st dog : ");
                getdetails();

            }
            public void info()
            {
                Console.Write("\nInformation for the 2nd dog: ");
                Console.WriteLine("\nName: " + name + ", Race: " + race
                    + ", Age: " + age + ", Weight: " + weight);

                Console.ReadLine();
            }
            public void getdetails()
            {
                _age = 1;
                _weight = 1;
                Console.WriteLine("\nName: No Name, Race: No Race" + ", Age: " + _age + ", Weight: "
                    + _weight);
                Console.WriteLine();
            }





            public static void Main(String[] args)
            {
                Animal dog = new Animal();
                Animal dog2 = new Animal(name,race,age,weight);***//HERE'S THE ERROR!
//SO HERE ARE WHERE MY TROUBLES LIE. I CREATED A NEW OBJECT AND I AM TRYING TO PASS
THE ENTERED INFORMATION FROM THE USER TO ONE OF MY CONSTRUCTORS BUT 
IM HAVING A TOUGH TIME DOING IT. COULD SOMEBODY HELP PLEASE?***

                Console.Write("Please enter your dog's name: ");
                dog.name = Console.ReadLine();
                Console.Write("Please enter your dog's race: ");
                dog.race = Console.ReadLine();
                Console.Write("Please enter your dog's age: ");
                dog.age = double.Parse(Console.ReadLine());
                Console.Write("Please enter your dog's weight: ");
                dog.weight = double.Parse(Console.ReadLine());

                dog.info(); 


            }
        }
    }
使用系统
//废话,废话
类动物
{
私有字符串名称;
私人弦乐比赛;
私人双倍重量;
私人双年龄;
公共动物(n串、r串、双a、双w)
{
name=n;
种族=r;
年龄=a;
重量=w;
}
公共双倍年龄
{
得到
{
回归年龄;
}
设置
{
如果(值>0和值25);
}
}
}
公众双倍重量
{
得到
{
返回重量;
}
设置
{
如果(值>0&&value=60);
}
}
}
公共动物()
{
Console.WriteLine(“无效年龄!”+“\n无效体重!”);
控制台。写入(“\n第一只狗的信息:”);
getdetails();
}
公开资料
{
控制台。写入(“\n第二只狗的信息:”);
Console.WriteLine(“\n名称:+name+”,种族:+Race
+年龄:“+年龄+”,体重:“+体重);
Console.ReadLine();
}
公开资料
{
_年龄=1岁;
_重量=1;
Console.WriteLine(“\n名称:无姓名,种族:无种族”+”,年龄:“+\u年龄+”,体重:
+(单位重量),;
Console.WriteLine();
}
公共静态void Main(字符串[]args)
{
动物狗=新动物();
Animal dog2=新动物(名称、种族、年龄、体重);***//这里是错误!
//这就是我的麻烦所在。我创造了一个新的物体,我正试图通过它
用户向我的一个构造函数输入的信息
我做这件事很艰难。有人能帮忙吗***
控制台。写下(“请输入您的狗的名字:”);
dog.name=Console.ReadLine();
控制台。写下(“请进入您的狗的比赛:”;
dog.race=Console.ReadLine();
控制台。写:“请输入您的狗的年龄:”;
dog.age=double.Parse(Console.ReadLine());
控制台。写下(“请输入您的狗的体重:”);
dog.weight=double.Parse(Console.ReadLine());
dog.info();
}
}
}
现在我知道有很多东西不需要写在这段代码中,但这就是我应该怎么做的,我只是在参数方面遇到了问题。有什么帮助吗?

你似乎混淆了构造函数调用和函数调用->
动物(名字,种族…)
只是代码中的一个函数,因此不能直接调用它。看看如何重载构造函数。顺便说一句,如果你知道你使用的是哪种语言,那就太好了

对不起,我用C++的代码分析你的代码…在C#中,除了将正确的值作为参数传递外,您做的一切都非常正确。您试图在定义/分配值之前传递该值,这就是您得到错误的原因。 因此,对于dog2,您可能希望这样做

   public static void Main(String[] args)
            {
                //variable declation
                string name, race;
                double age, weight;

                //variable assigned user inputs
                Console.Write("Please enter your dog's name: ");
                name = Console.ReadLine();
                Console.Write("Please enter your dog's race: ");
                race = Console.ReadLine();
                Console.Write("Please enter your dog's age: ");
                age = double.Parse(Console.ReadLine());
                Console.Write("Please enter your dog's weight: ");
                weight = double.Parse(Console.ReadLine());

                // call of the overloaded constructor with the right parameters
                Animal dog2 = new Animal(name,race,age,weight);

                dog2.info(); 


            } 

我希望这有帮助,祝你好运:)

你的例子有两个
构造函数
,一个默认的无参数
构造函数
Animal()
,还有一个
构造函数
需要四个参数
Animal(字符串n,字符串r,双a,双w)
构造函数的签名
通知您所需的
参数的编号和类型

Animal dog = new Animal();
当您使用默认的无参数构造函数时,上述方法可以毫无疑问地工作

Animal dog2 = new Animal(name, race, age, weight);
当您试图使用参数化构造函数时,上述方法不起作用,但是,您正在以
未解析符号的形式传递它

您需要做的是声明(并根据需要实例化)一些将传递给构造函数的变量:

public static void Main(string[] args)
{
    string name = "SomeName";
    string race = "SomeRace";
    double age = 12;
    double weight = 9001;

    Animal dog2 = new Animal(name, race, age, weight);
}
如果需要/希望用户定义传递给参数化构造函数的参数值,则需要执行类似于在示例中进一步收集用户输入的操作(使用
Console.ReadLine()

*编辑:


@“那么您的确切意思是什么,因为我确实声明了字符串和双变量来传递它们,但它不起作用。”

您的代码中的这一部分似乎已被省略或遗漏

@“您是说我必须在类animal?的构造函数中请求用户输入,还是创建一个接受输入的方法来更改传递的变量的值?”

您正试图使用
Main
函数中的参数化构造函数创建
Animal
的实例,因此,在调用构造函数之前以及在
Main
函数中,您需要声明并实例化变量,这些变量将用作
Animal
构造函数的参数


@“正如我所说,我确实声明了字符串和双精度,但我没有给它们赋值,因为正如你所说,我正试图让用户定义我的参数,但我不确定如何准确地执行。”

您的代码已经有了一个如何获取用户输入并将其分配给变量的示例:

// You wrote this [:
Console.Write("Please enter your dog's name: ");
dog.name = Console.ReadLine();
Console.Write("Please enter your dog's race: ");
dog.race = Console.ReadLine();
Console.Write("Please enter your dog's age: ");
dog.age = double.Parse(Console.ReadLine());
Console.Write("Please enter your dog's weight: ");
dog.weight = double.Parse(Console.ReadLine());
上述要求
dog.name = Console.ReadLine();
private static void Main(string[] args)
{
    // Obtain parameter values from user

    Console.WriteLine("Enter a name");
    string name = Console.ReadLine();
    Console.WriteLine("Enter a race");
    string race = Console.ReadLine();
    Console.WriteLine("Enter an age");

    // Console.ReadLine() reads values in as strings
    // Therefore you will need to convert the values you want as doubles
    double age;
    while (!double.TryParse(Console.ReadLine(), out age))
    {
        Console.WriteLine("The value you entered is not a valid age, please enter a valid age");
    }
    Console.WriteLine("Enter a weight");
    double weight;
    while (!double.TryParse(Console.ReadLine(), out weight))
    {
        Console.WriteLine("The value you entered is not a valid weight, please enter a valid weight");
    }

    // Create an instance of Animal
    Animal dog2 = new Animal(name, race, age, weight);
}