Инициализация свойства в c # - PullRequest
1 голос
/ 01 апреля 2010

У меня есть конструктор, который я пытаюсь построить с заголовком 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 ]

4 голосов
/ 01 апреля 2010

Конструктор должен сопоставить свои параметры с частными полями класса - вот как должен выглядеть ваш класс:

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;
    }
}
0 голосов
/ 01 апреля 2010

Вам нужно добавить сеттеры, например так:

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

Если вам нужны простые геттеры и сеттеры, этот синтаксис короче, и, на мой взгляд, его легче читать:

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

Затем вы просто назначаете параметр полю, как показывают многие другие ответы.

0 голосов
/ 01 апреля 2010

Нет, это привело бы к плохому случаю бесконечной рекурсии. Просто назначьте значения как обычно, т.е.

x = x0;
y = y0;
0 голосов
/ 01 апреля 2010

Нет, вы используете 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;
    }
}
...