2011-11-16 2 views
0

정수형 좌표 점과 부동 소수점 좌표 점과 같이 다양한 정밀도 수준 구조의 라이브러리를 작성하고 있습니다. .NET은 Point을 통합 구조로 사용하고 부동 소수점 변형은 PointF을 사용하지만 최근에 Point 및 중첩 된 Point.Double을 사용하는 Java의 해당 요소를 우연히 발견했습니다.다른 정밀도 수준의 유형을 계층 구조로 구조화해야합니까?

나는 다음과 같은 유형을 정의의 아이디어를 좋아하지 :

struct Point { 
    // integral implementation 

    public struct Double { 
     // double floating-point implementation 
    } 
    public struct Long { 
     // 64-bit implementation 
    } 
    // etc.. 
} 

내가 부모 유형 내에서 "두 번"과 "롱"을 재정의 좋아하지 않는다. 누구든지이 패턴을 사용하고 그로부터 발생하는 더 이상의 문제를 발견 했습니까? 또는 Point, PointD, & PointL과 같이 사용해야합니까?

+0

그냥 뻔한 상태에 당신이 *에 * 한 것, 그래서 당신은, 구조체에서 상속 할 수 없습니다 : 당신은 그냥 이름 지정 규칙에 가지 않을 이유

또한

, 나는 볼 수 없습니다 MS 접근 방식을 취하십시오. – tcarvin

+0

@tcarvin - 죄송합니다. 하위 클래스가 아니라 중첩 된 클래스를 의미했습니다. 게시 된 샘플 코드 *는 C#에서 유효합니다. – dlras2

+0

구조체 또는 클래스 인 경우 이들간에 큰 차이가 있습니다. 사용자가 Point 유형의 변수를 가지고 있으면 코드 샘플이 구조체이므로 * Point.Double과 Point.Long이 모두 존재합니다 (메모리 차지). 최소한 클래스를 사용하면이를 방지 할 수 있습니다. – tcarvin

답변

3

나는이 아이디어를 경멸한다. 나는 중첩 된 클래스를 포함하는 클래스의 구현 세부 사항으로 생각하고 double 필드가있는 점은 int 필드가있는 점의 구현 세부 사항이 아닙니다. 중첩 된 클래스는 포함하는 클래스 외부에서 이해할 수없는 구현 세부 사항을 캡슐화하는 데 사용됩니다. 여기서, 그것은 사실이 아닙니다. 이러지 마.

struct Int32Point 
struct Int64Point 
struct SinglePoint 
struct DoublePoint 
+0

만약 내가 그것들을'Point.Int32','Point.Double' 등으로 이름 짓는다면 그것은 당신이 묘사 한 "구현 세부 사항"규약을 따르는 것처럼 보입니다. – dlras2

+0

다른 이름으로 장미 .... – jason

+0

나는 "구현 세부 사항"에 약간 혼란 스럽다. 왜냐하면 당신은 하위 클래스로서'Point'의 "구현"을 갖고있는 것처럼 보이기 때문이다. – dlras2

관련 문제