创建结构变量C#

时间:2012-09-11 12:55:29

标签: c#

我是一个初学者,通过一本书中的例子,有点难以理解。我正在阅读本书并编写代码以了解它的作用。我在结构的一部分,特别是结构变量。以下代码的错误为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);
        }

    }

6 个答案:

答案 0 :(得分: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 };

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

答案 1 :(得分:4)

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

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

您可以获得单线构造的优势,而无需编写其他代码。

答案 2 :(得分:0)

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

你需要:

public Point(int x, int y){ // assign these to your properties. }

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

你不必初始化主要点吗?

 Point myPoint = new Point();

答案 5 :(得分:0)

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

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