2013-11-04 4 views
2



개체의 2D 위치를 저장하는 데 사용되는 간단한 코드의 일부 이상한 동작이 발생합니다.
크기 D이라는 클래스를 만들고 너비와 높이를 Double로 포함했습니다.

CODE :C# 배열 값이 일정한 패턴으로 뒤집 으면

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

이 꽤 똑바로 앞을 향해 열린 길을 건너 내가이 클래스에서 일어날 특별한 것을 기대하지 않았다.
더 쉽게 사용할 수 있도록 미리 정의 된 클래스 중 일부가 포함 된 정적 배열이 있습니다.

CODE : 내가 겪고있어

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

문제는 크기 내에서 값이 자주 런타임에 플립 것입니다.

1 : 너비 = 너비 및 높이 = 높이.
2 : 너비 = 높이 및 높이 = 너비.
이것은 또한 반복 패턴 (1,2,1,2,1,2) 등으로 발생합니다.

여기에 무슨 일이 일어 났는지 설명해주세요.
시간 내 주셔서 감사합니다.

편집 : 크기가이 값을 읽으려고 할 때 주로 발생 (* (72/2.54 21.0)을, 29.7 * (72/2.54)).

+1

[예제] (http://sscce.org/)를 보여주십시오. –

+2

은 '높이'또는 '너비'를 지정하는 다른 사람입니까? 'private'을 만들어보십시오. –

+0

해당 개체의 멤버 또는 배열 요소에 할당 할 모든 장소를 살펴보십시오. – usr

답변

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

지금, 당신의 코드는 읽기 전용 인스턴스를 만들 수 있습니다. 컴파일 오류가 어디 있는지 확인하십시오. 이러한 장소 중 하나는 버그가 있으며 값이 잘못 변경됩니다. 크기가 불변 인 디자인을 고려해보십시오. 버그가 예방됩니다. 항상 적절한 것은 아니지만 프로그램에서이 클래스를 사용하여 결정할 수있는 것입니다.