2010-04-01 3 views
1

У меня есть конструктор, я пытаюсь построить с заголовком public KsuPoint(double x0, double y0)Инициализация свойства в C#

теперь я также имеет свойство в классе, как показано ниже

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

Конструктор должен сопоставить его параметры для частных полей класса - вот то, что ваш класс должен выглядеть следующим образом:

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

ОК .. так что все в значительной степени согласны, что это должно что-то с этой точки зрения? this.x = x0; this.y = y0; спасибо! – Shonna

0

Нет, вы используете только новое, если хотите создать новый объект класса, обычно вне класса.

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; 
    } 
} 
+0

Заглавные буквы X и Y являются только получателями. Это было бы проблематично. – spender

+0

да, мои инструкции сказали сделать это только для чтения. и вытащить сеттеры:/ – Shonna

+0

хорошо «только для чтения» в том смысле, что theres нет сеттеров LOL – Shonna

0

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

x = x0; 
y = y0; 
0

Вы должны добавить сеттеры, как это:

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

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

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

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

Смежные вопросы