C# 如何返回所有数据成员,而不仅仅是坡度和长度
我很好奇如何(如果可能的话)通过重写ToString返回程序中的所有数据成员。数据成员是x和y坐标以及起点和终点。可能只是我遗漏了一些小东西,但我会感谢一些外部的意见,谢谢C# 如何返回所有数据成员,而不仅仅是坡度和长度,c#,C#,我很好奇如何(如果可能的话)通过重写ToString返回程序中的所有数据成员。数据成员是x和y坐标以及起点和终点。可能只是我遗漏了一些小东西,但我会感谢一些外部的意见,谢谢 namespace LineMath { class Program { static void Main(string[] args) { Point p1 = new Point(10, 5); Point p2 = new
namespace LineMath
{
class Program
{
static void Main(string[] args)
{
Point p1 = new Point(10, 5);
Point p2 = new Point(36, 18);
LineMath.Program.Point.Line LI1 = new LineMath.Program.Point.Line(p1, p2);
Console.WriteLine("Line Values");
Console.WriteLine("----------------");
Console.WriteLine((LI1.ToString()));
Console.WriteLine("----------------");
Console.WriteLine();
}
public class Point
{
private double xpoint;
private double ypoint;
public Point()
{
}
public Point(double xpointvalue, double ypointvalue)
{
xpoint = xpointvalue;
ypoint = ypointvalue;
}
public double X
{
get
{
return xpoint;
}
set
{
}
}
public double Y
{
get
{
return ypoint;
}
set
{
}
}
public class Line
{
private Point bp;
private Point ep;
private double li;
private double sl;
public Line()
{
}
public Line(Point a, Point b)
{
bp = a;
ep = b;
li = Math.Sqrt((Math.Pow((ep.X - bp.X), 2) + Math.Pow((ep.Y - bp.Y), 2)));
sl = (ep.Y - bp.Y) / (ep.X - bp.X);
}
public Point BP
{
set
{
}
}
public Point EP
{
set
{
}
}
public double LI
{
get
{
return li;
}
}
public double SL
{
get
{
return sl;
}
}
public override string ToString()
{
return "Slope = " + sl.ToString("F2") + "\n" + "\n" + "Length = " + li.ToString("F2");
}
}
}
}
}
通过使用
out
参数或创建一个新的数据结构(一个struct
或class
)来保存返回值,可以从一个方法返回多个值。e、 g
private void GetXYBeginEnd(int a, int b, out int x, out int y, out int begin, out int end)
{
// assign your out params in here
}
或:
ToString()的目的是提供对象实例的字符串表示形式,该对象实例在某种程度上对程序员(通常用于调试)或程序用户有意义
您可以访问该类的所有字段、属性和方法,并可以从中创建对您有意义的字符串表示
返回我的程序中的所有数据成员
一个程序通常由多个类组成。ToString()作用于给定类的给定实例,而不是“整个程序”。你可能需要澄清你的问题的这一部分是什么意思
如果希望返回数据,并且希望对该数据执行某些操作(除了显示数据外),则不应为此使用ToString()
更新(根据您的编辑)
看我加的那一行。它显示了一种包含属性BP的方法。您可以将其扩展到任何其他属性。请注意,您使用的是“\n\n”,但在Windows环境中可能意味着“\r\n”。您可以使用Environment.NewLine让运行时为您处理正确的换行代码
public override string ToString()
{
return "Slope = " + sl.ToString("F2") + "\n" + "\n" + "Length = " + li.ToString("F2")
Environment.NewLine + " BP (" + BP.X + ", " + BP.Y + ")";
}
放置坡度和长度的公式,分别作为SL和LI的值
public double SL
{
get
{
if(bp == null || ep == null)
sl = 0.0;
else
//Formula for slope of a line
sl = (ep.Y - bp.Y) / (ep.X - bp.X);
return sl;
}
}
public double LI
{
get
{
//Use Euclidean distance to get length of line
if(bp == null || ep == null)
li = 0.0;
else
li = Math.Sqrt(Math.Pow(bp.X - ep.X, 2) + Math.Pow(bp.Y - ep.Y, 2));
return li;
}
}
public override string ToString()
{
//Something like this
return "Line1\nBegin Point: (" + bp.X + ", " + bp.Y + ")\nEnd Point: (" + ep.X + ", " + ep.Y + ")\n\nSlope = " + sl.ToString("F2") + "\n\n" + "Length = " + li.ToString("F2");
}
您指的是什么对象?当然,通过重写ToString()可以返回您想要的任何内容。只要在重写的方法中返回所需的数据即可。@user3508959,您不能将多行字符串粘贴到注释中。请更新您的问题。我已编辑了您的标题。请看,“,其中的共识是“不,他们不应该”。我把我到目前为止更新了我的答案,因为这只是一个控制台程序
public double SL
{
get
{
if(bp == null || ep == null)
sl = 0.0;
else
//Formula for slope of a line
sl = (ep.Y - bp.Y) / (ep.X - bp.X);
return sl;
}
}
public double LI
{
get
{
//Use Euclidean distance to get length of line
if(bp == null || ep == null)
li = 0.0;
else
li = Math.Sqrt(Math.Pow(bp.X - ep.X, 2) + Math.Pow(bp.Y - ep.Y, 2));
return li;
}
}
public override string ToString()
{
//Something like this
return "Line1\nBegin Point: (" + bp.X + ", " + bp.Y + ")\nEnd Point: (" + ep.X + ", " + ep.Y + ")\n\nSlope = " + sl.ToString("F2") + "\n\n" + "Length = " + li.ToString("F2");
}