C#Accessor自动属性不足以满足FillPolygon()

时间:2017-08-05 22:30:25

标签: c# user-controls accessor shorthand

我正在创建一个简单的用户控件。我有4个积分,我正在尝试使用e.Graphics.FillPolygon(brush, shape);

填充积分区域

shape是使用Point[] shape = { Target, PointB, PointC, PointD };

创建的

这些要点来自以下几点:

    Point target = new Point(0, 0);
    public Point Target {
        get { return target; }
        set { target = value; }
    }

    Point pointB = new Point(100, 0);
    public Point PointB { get; set; }
    //    get { return pointB; }
    //    set { pointB = value; }
    //}


    Point pointC = new Point(0, 100);
    public Point PointC {
        get { return pointC; }
        set { pointC = value; }
    }


    Point pointD = new Point(200, 500);
    public Point PointD {
        get { return pointD; }
        set { pointD = value; }
    }

我的问题是使用public Point PointB { get; set; }似乎不起作用,所以我必须写出整个get { return pointB; } set { pointB = value; }

速记符号有什么特别之处吗?

使用{ get; set; }enter image description here

使用更长(正确?)的表示法:enter image description here

在使用简写符号时,似乎只是忽略了PointB

此外,在访问者位之前或之后使用Point target = new Point(0, 0);是否合适:

Point target = new Point(0, 0);
public Point Target {
    get { return target; }
    set { target = value; }
}

public Point Target {
    get { return target; }
    set { target = value; }
}
Point target = new Point(0, 0);

1 个答案:

答案 0 :(得分:1)

初始化应如下所示(较新的C#版本,C#6.0或更高版本):

public Point PointB { get; set; } = new Point(100, 0);

当你这样做时:

Point pointB = new Point(100, 0);     // Never used, not a backing field.
public Point PointB { get; set; }     // Has a backing field that you cannot refer to.

私人pointB从未使用过。自动属性的支持字段为,称为pointB。它有一个无法使用的名称,如果不使用该属性,您将无法访问它。