1

我是一个初学者,正在阅读书中有些难以理解的示例。我正在阅读这本书并编译代码以了解它的作用。我在结构的一部分,特别是结构变量。以下代码有错误point does not take two arguments。有人可以帮我找出这里缺少/不正确的地方吗?谢谢。

    using System;

    class Program
    {
        static void Main(string[] args)
        {

            // Create an initial Point.
            Point myPoint;
Point p1 = new Point(10, 10);
            myPoint.X = 349;
            myPoint.Y = 76;
            myPoint.Display();
            // Adjust the X and Y values.
            myPoint.Increment();
            myPoint.Display();
            Console.ReadLine();
        }
        // Assigning two intrinsic value types results in
        // two independent variables on the stack.
        static void ValueTypeAssignment()
        {
            Console.WriteLine("Assigning value types\n");
            Point p1 = new Point(10, 10);
            Point p2 = p1;
            // Print both points.
            p1.Display();
            p2.Display();
            // Change p1.X and print again. p2.X is not changed.
            p1.X = 100;
            Console.WriteLine("\n=> Changed p1.X\n");
            p1.Display();
            p2.Display();
        }
    }


    struct Point
    {
        // Fields of the structure.
        public int X;
        public int Y;
        // Add 1 to the (X, Y) position.
        public void Increment()
        {
            X++; Y++;
        }
        // Subtract 1 from the (X, Y) position.
        public void Decrement()
        {
            X--; Y--;
        }
        // Display the current position.
        public void Display()
        {
            Console.WriteLine("X = {0}, Y = {1}", X, Y);
        }

    }
4

6 回答 6

7

您需要向 中添加一个双参数构造函数Point,因为您使用参数调用它(10, 10)。

struct Point
{
    // Fields of the structure.
    public int X;
    public int Y;

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

或者,您可以使用内置的 nullary(无参数)构造函数构造它,然后设置属性:

Point myPoint = new Point();
myPoint.X = 349;
myPoint.Y = 76;

一个简写是:

Point myPoint = new Point { X = 349, Y = 76 };

甚至更短:

var myPoint = new Point { X = 349, Y = 76 };

最后,使结构不可变通常是一种好习惯:一旦构建,就不可能修改它们的内容。这有助于避免语言中的许多其他陷阱。

于 2012-09-11T12:57:28.827 回答
4

不要使用带有两个参数的构造函数来构造点,而是将属性实例化为同一调用的一部分。例如:

Point p = new Point { X = 1, Y = 2 };

您无需编写额外代码即可获得单行构造的优势。

于 2012-09-11T12:58:46.613 回答
0

您没有定义了两个参数的构造函数。你的点结构应该是这样的才有效

public Point(int x, int y)
{
    X = x;
    Y = y;
}
于 2012-09-11T13:04:30.967 回答
0

您缺少 Point 结构的构造函数:

public Point(int x, int y)
{
    X = x;
    Y = y;
}
于 2012-09-11T13:00:01.960 回答
0

您在 Point 上没有带有两个参数的构造函数。

你需要:

public Point(int x, int y){ // assign these to your properties. }
于 2012-09-11T12:58:09.220 回答
0

您不必在main中初始化点吗?

 Point myPoint = new Point();
于 2012-09-11T13:02:09.727 回答