C# 如何返回所有数据成员,而不仅仅是坡度和长度

C# 如何返回所有数据成员,而不仅仅是坡度和长度,c#,C#,我很好奇如何(如果可能的话)通过重写ToString返回程序中的所有数据成员。数据成员是x和y坐标以及起点和终点。可能只是我遗漏了一些小东西,但我会感谢一些外部的意见,谢谢 namespace LineMath { class Program { static void Main(string[] args) { Point p1 = new Point(10, 5); Point p2 = new

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

                }
            }
        }
    }
}

通过使用
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");
}