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);
}