2



我遇到了一些我用来存储对象的二维位置的简单代码的奇怪行为。
我创建了一个名为SizeD的类,其中包含 Double 的 Width 和 Height。

代码:

public class SizeD
{
    internal Double Width;
    internal Double Height;
    /// <summary>
    /// Creates a new instance of SizeD
    /// </summary>
    public SizeD(Double Width, Double Height)
    {
        this.Width = Width; this.Height = Height;
            return;
    }
}

这是非常直接的,我没想到这门课会发生什么特别的事情。
还有一个包含这些预定义类的静态数组,以便于使用。

代码:

internal static SizeD[] PaperTypeSize =  //Converts CM to points.
{
    new SizeD(8.5 * 72, 11.0 * 72),
    new SizeD(8.5 * 72, 14.0 * 72),
    new SizeD(21.0 * (72 / 2.54), 29.7 * (72 / 2.54))
};

我遇到的问题是 SizeD 中的值经常在运行时翻转。

1:宽度 = 宽度,高度 = 高度。
2:宽度 = 高度和高度 = 宽度。
重复模式 (1,2,1,2,1,2) 等也会发生这种情况。

有人可以向我解释这里发生了什么吗?
谢谢你的时间!

编辑: 它主要发生在尝试读取此值 SizeD(21.0 * (72 / 2.54), 29.7 * (72 / 2.54)) 时。

4

1 回答 1

0

使用属性使您的字段只读:

public class SizeD
{
    public double Width { get; private set; };
    public double Height { get; private set; };

    /// <summary>
    /// Creates a new instance of SizeD
    /// </summary>
    public SizeD(double width, double height)
    {
        this.Width = width;
        this.Height = height;
    }
}

现在,您的代码只能创建只读实例。检查你在哪里得到编译错误。这些地方之一是错误的并且错误地更改了值。考虑一个尺寸不可变的设计,这将防止这些错误。这并不总是合适的,但这只有您可以根据您在程序中使用此类来决定。

于 2013-11-05T08:24:48.750 回答