C# 初学者:输出与预期不同
我试图从一个私有类获得一个预先确定的输出(指定为颜色和速度)。但是,当我要求程序编写行时,它打印出的是C# 初学者:输出与预期不同,c#,class,C#,Class,我试图从一个私有类获得一个预先确定的输出(指定为颜色和速度)。但是,当我要求程序编写行时,它打印出的是Car\u EX\u 3.Car,而不是颜色和数字 这是到目前为止我的代码 namespace Car_Ex_3 { class Car { private string colour; private double speed; public Car(string colour) { thi
Car\u EX\u 3.Car
,而不是颜色和数字
这是到目前为止我的代码
namespace Car_Ex_3
{
class Car
{
private string colour;
private double speed;
public Car(string colour)
{
this.colour = colour;
}
public Car(string colour, double speed)
{
this.colour = colour;
this.speed = speed;
}
public string GetColour()
{
return colour;
}
public double GetSpeed()
{
return speed;
}
class Program
{
static void Main(string[] args)
{
Car car1 = new Car("red" + " " + 50d);
Car car2 = new Car("Yellow" +" " + 60d);
Console.WriteLine(car1);
Console.WriteLine(car2);
Console.ReadKey();
}
}
}
}
正如许多人已经提到的那样:重写
Object.ToString()
方法将获得所需的结果
C#中的每个类都派生自System.Object
类,但是.ToString()
方法通常只打印实例类的名称。要防止出现这种情况,请在汽车
类中实施一种新方法:
public override string ToString ()
{
return "Car (Color: " + colour + ", Speed: " + speed.ToString() + ")";
}
或使用String.Format
:
public override string ToString ()
{
return string.Format("Car (Color: {0}, Speed: {1})", colour, speed.ToString());
}
事实上,你做得不对 正确的方法:
Car car1 = new Car("red", 50d);
Car car2 = new Car("Yellow", 60d);
Console.WriteLine("Car1 Color: " + car1.colour + " Number: " + car1.speed);
Console.WriteLine("Car2 Color: " + car2.colour + " Number: " + car2.speed);
您必须使用具有2个参数的构造函数,一个参数颜色,第二个参数是速度。
在Console.WrtieLine()
中,您直接编写了类对象,这就是为什么它会产生不想要的结果(Car\u EX\u 3.Car
),因为它通过名称空间和类名告诉您对象的类型。
您必须访问car1
和car2
对象的color
和speed
属性
最初,您正在做car1=新车(“红色”+“”+50d)代码>,它调用的是单参数构造函数,而不是双参数构造函数,因为编译器将的“red”+“”+50d
转换为字符串
正如上面Ian H.所建议的,您可以重写ToString()
或创建自己的方法,将复合类型(您的类对象)转换为所需的字符串格式,并在代码中的任何位置使用。只需浏览代码:
// Don't forget to include the access modifier
class Car
{
private string colour;
private double speed;
// Is it valid to have just a color and not a speed as well?
public Car(string colour)
{
this.colour = colour;
}
public Car(string colour, double speed)
{
this.colour = colour;
this.speed = speed;
}
// In C# this should be a property
public string GetColour()
{
return colour;
}
public double GetSpeed()
{
return speed;
}
class Program
{
static void Main(string[] args)
{
Car car1 = new Car("red" + " " + 50d);
Car car2 = new Car("Yellow" +" " + 60d);
This is incorrect
Console.WriteLine(car1);
Console.WriteLine(car2);
Console.ReadKey();
}
}
}
请尝试以下操作:
public class Car
{
private string colour;
private double speed;
// Is it valid to have just a color and not a speed as well?
public Car(string colour)
{
this.colour = colour;
// Initialize it to 0.0
speed = 0.0;
}
public Car(string colour, double speed)
{
this.colour = colour;
this.speed = speed;
}
// In C# this should be a property
public string Colour
{
get { return colour; }
}
public double Speed
{
get { return speed; }
}
class Program
{
static void Main(string[] args)
{
Car car1 = new Car("red" + " " + 50d);
Car car2 = new Car("Yellow" +" " + 60d);
// Do something like the following to print what you want
Console.WriteLine(car1.Colour + " " + car1.Speed);
Console.WriteLine(car2.Colour + " " + car2.Speed);
Console.ReadKey();
}
}
}
正如其他人提到的,您也可以通过重写ToString()方法来实现这一点。Ian H.在他的答案中有一个很好的代码示例,如果这是您想要走的路线。您没有编写任何可以打印颜色或数字的代码。了解ToString()
.Console.WriteLine(car1.getcolor());是不是应该是新车(黄色,60d)代码>@Steve谢谢!就这样!我还有一个错误,用“+”而不是“,”在主stringWrite中,您可以将类分开编写,而不是将程序类包装在car类中作为开始。为了更简洁,您可能需要让代码示例使用字符串返回字符串。Format函数与所有值+字符串文字的串联我不确定这是否太高级。编辑我的答案:)