2012-03-03 3 views
1

조금 이론적 인값을 생성자에 전달하는 방법은 무엇입니까? 내 질문에 대한 죄송

내가 OOP 다음 코드를 공부에 새로운 오전입니다.

public interface IShape 
{ 
    double getArea(); 
} 

public class Rectangle : IShape 
{ 
    int lenght; 
    int width;   

    public double getArea() 
    { 
     return lenght * width; 
    }  
} 

public class Circle : IShape 
{ 
    int radius;  

    public double getArea() 
    { 
     return (radius * radius) * (22/7); 
    }   
} 

public class SwimmingPool 
{ 
    IShape innerShape; 
    IShape outerShape; 

    SwimmingPool(IShape _innerShape, IShape _outerShape) 
    { 
     //assignment statements and validation that poolShape can fit in borderShape; 
    } 

    public double GetRequiredArea() 
    { 
     return outerShape.getArea() - innerShape.getArea(); 
    } 

} 

이 코드는 다른 모양의 영역을 계산합니다. SwimingPool 클래스의 생성자를 볼 수 있지만 생성자에 값을 전달하는 방법을 알지 못합니다. 이전에는 인터페이스를 사용하여 프로그래밍을 수행하지 않았습니다. 제발 나를 안내 3 가지 :

  1. 디자인 타임에 가치를 전달하는 방법. (두 매개 변수는 모든 유형이 될 수있을 때)
  2. 는 런타임에 값을 전달하는 방법.
  3. 어떻게 OO 방식으로 여기에 검증을 할까? 귀하의 시간과 도움을

감사합니다.

답변

3

잘 같은, 당신이 인터페이스를 사용하는 않습니다.

class Pool 
{ 
    private IShape _InnerShape; 
    private IShape _OuterShape; 

    public Pool(IShape inner, IShape outer) 
    { 
     _InnerShape = inner; 
     _OuterShape = outer; 
    } 

    public double GetRequiredArea() 
    { 
     return _InnerShape.GetArea() - _OuterShape.GetArea(); 
    } 

    } 

및 사용은 것 같다 뭔가

IShape shape1 = new Rectangle() { Height = 1, Width = 3 }; 
IShape shape2 = new Circle() { Radius = 2 }; 

Pool swimmingPool = new Pool(shape1, shape2); 
Console.WriteLine(swimmingPool.GetRequiredArea()); 

처럼 될 것입니다 : 당신은 당신의 RectangleCircle로 인터페이스를 사용하기 위해 구현을 필요로하기 때문에, 당신은 단순히 같은 것을 할 것 는 사용자의 설명에 따라 객체가 인터페이스를 구현하는지 테스트하려는 것입니다. 당신은 @scibuff이

if (shape1 is Circle) //... 
+0

감사합니다 Bryan Crosby, 그것은 디자인 타임에 괜찮습니다. 유형에 대해 확실하지 않을 때 런타임에 처리하는 방법에 대한 조언을 원하십니까? 나는 그것을 exectly 이해하지 않지만 다형성에있을 수 있습니까? 덕분에 – haansi

+0

@haansi : 유형은 우리가이'IShape' 객체를 사용하는 생성자를 정의하기 때문에'IShape'을 구현하는 것도있을 것입니다. 런타임에 유형을 반드시 알아야 할 필요는 없습니다. –

+0

감사합니다. @Bryan Crosby, 내가 어떻게 인스턴스화할지 유형을 알지 못한다면?당신처럼 : IShape shape1 = new Rectangle() {높이 = 1, 너비 = 3}; IShape shape2 = new Circle() {반경 = 2}; 여기에는 하나의 유형이 Rectangle이고 다른 하나는 Circle 인 것으로 알려져 있습니다. 상담하십시오. – haansi

3

그냥 생성자가 두 IShape 매개 변수가 필요합니다 당신의 SwimmingPool 클래스 있도록이

SwimmingPool(IShape innerShape, IShape outerShape) 
{ 
    this.innerShape = innerShape; 
    this.outerShape = outerShape; 

    this.Validate(); 
} 

private void Validate() 
{ 
    // or some other condition 
    if (GetRequiredArea() < 0){ 
      throw new Exception("The outer shape must be greater than the inner one"); 
    } 
} 
+0

감사합니다 뭔가를 할 수

, 나는 수영장 클래스의 객체를하면서 생성자에 값을 전달하는 방법에 대한 조언이 필요하십니까? 혼란은 innerShape이고 outerShape는 임의의 모양 (원형 또는 직사각형) 일 수 있습니다. 런타임에 어느 것을 전달할지를 아는 방법은 무엇입니까? – haansi

+0

그 검증이 충분하지 않을 것이다 - 당신도 – BrokenGlass

+0

이 – haansi

관련 문제