繁体   English   中英

在c#中初始化属性

[英]Initializing a property in c#

我有一个构造函数我试图用标题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);
    }

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

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

当您想要通常在类之外创建类的新对象时,不能仅使用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;
    }
}

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

x = x0;
y = y0;

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM