2



オブジェクトの 2D 位置を格納するために使用しているいくつかの単純なコードの奇妙な動作を経験しています。幅と高さを Double として含むSizeD
というクラスを作成しました。コード:

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

これで、コードは読み取り専用インスタンスのみを作成できます。コンパイル エラーが発生する場所を確認します。それらの場所の 1 つはバグが多く、値が正しく変更されません。サイズが不変である設計を検討してください。これにより、これらのバグが防止されます。常に適切であるとは限りませんが、プログラムでのこのクラスの使用に基づいて決定できるのは、あなただけです。

于 2013-11-05T08:24:48.750 に答える