如何返回所有数据成员,而不仅仅是斜率和长度

时间:2014-04-08 00:19:48

标签: c#

我很好奇如何(如果可能的话)通过重写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");

                }
            }
        }
    }
}

3 个答案:

答案 0 :(得分:0)

您可以使用out参数或创建新的数据结构(structclass)来保存返回值,从而返回方法的值。 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");
}