在c#中初始化属性

时间:2010-04-01 00:04:57

标签: c# visual-studio-2008

我正在尝试使用标头public KsuPoint(double x0, double y0)

构建一个构造函数

现在我也有类中的属性,如下所示

private double x;

    public double X
    {
        get { return x; }

    }

    private double y;

    public double Y
    {
        get { return y; }

    }

这个构造函数假设初始化属性X和Y ...

这是对的吗?还是我离开了?

public KsuPoint(double x0, double y0)
    {
        new KsuPoint(x0, y0);
    }

4 个答案:

答案 0 :(得分:4)

构造函数需要将它的参数映射到类的私有字段 - 这是您的类应该是这样的:

class KsuPoint
{
    private double x;
    private double y;

    public double X { get { return x; } }
    public double Y { get { return y; } }

    public KsuPoint(double x0, double y0)
    {
        this.x = x0;
        this.y = y0;
    }
}

如果你想更简洁,你可以这样做:

class KsuPoint
{
    public double X { get; private set; }
    public double Y { get; private set; }

    public KsuPoint(double x0, double y0)
    {
        this.X = x0;
        this.Y = y0;
    }
}

答案 1 :(得分:0)

当您想要通常在课堂外创建类的新对象时,不会只使用new。

public KsuPoint(double x0, double y0)
{
    x = x0;
    y = y0;
}

您的代码中的其他地方就是:

KsuPoint point = new KsuPoint(3, 4);

如果您使用的是C#3.0,也可以这样做:

class KsuPoint
{
    public double X { get; private set; }
    public double Y { get; private set; }

    public KsuPoint(double x0, double y0)
    {
        X = x0;
        Y = y0;
    }
}

答案 2 :(得分:0)

不,这会导致无限递归的坏情况。只需正常分配值,即

x = x0;
y = y0;

答案 3 :(得分:0)

您需要添加setter,如下所示:

public double X
{
    get { return x; }
    set { x = value; }
}

如果你只想要简单的getter和setter,这个语法更短,在我看来更容易阅读:

public double x0 { get; set; }
public double y0 { get; set; }

然后,您只需将参数分配给该字段,就像许多其他答案所示。