2010-04-01 185 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 2010-04-01 00:11:23

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

大写的X和Y只是获取者。这会有问题。 – spender 2010-04-01 00:08:41

+0

是的,我的指令说让它只读。并拿出二传手:/ – Shonna 2010-04-01 00:09:32

+0

以及'只读'的意义上说,没有setters大声笑 – Shonna 2010-04-01 00:09:58

0

不,这将导致不良无限递归的情况。只要正常分配的值,即

x = x0; 
y = y0; 
0

您需要添加setter方法,就像这样:

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

如果你只是想简单的getter和setter方法,这句法更短,更容易在阅读我的意见:

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

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