我很好奇如何(如果可能的话)通过重写ToString来返回程序中的所有数据成员。数据成员是x和y坐标以及起点和终点。它可能只是我错过了一些小东西,但会欣赏一些外部输入,谢谢。
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");
}
}
}
}
}
答案 0 :(得分:0)
您可以使用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
}
OR:
class CalcResult
{
public int X { get; set; }
public int Y { get; set; }
public int Begin { get; set; }
public int End { get; set; }
}
private CalcResult GetXYBeginEnd(int a, int b, out int x, out int y, out int begin, out int end)
{
// do stuff
return new CalcResult { X = 23, Y = 54, Begin = 45, End = 98 };
}
答案 1 :(得分:0)
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 + ")";
}
答案 2 :(得分:0)
放置斜率和长度的公式,分别为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");
}