2017-10-20 3 views
1

C#의 집계에 몇 가지 문제가 있습니다. 이러한 클래스 중 하나를 인스턴스화 할 필요가있을 때매개 변수가없는 집계 관계

이 유일한 문제는
namespace ShapeDrawing 
{ 
    public abstract class Shape 
    { 
     protected Drawing myDrawing; 

     public Shape(Drawing drawing) 
     { 
      myDrawing = drawing; 

     } 
    } 
    public abstract class Drawing 
    { 
     public abstract void drawLine(); 
     public abstract void drawCircle(); 
    } 
} 

, 모양의 서브 클래스는 매개 변수로 지금 그리기있다 : 바로 지금, 나는 다음과 같은 코드가 있습니다. 유일한 문제는 (프로그램의 추론으로 인해) 해당 클래스에 대한 매개 변수로 드로잉을 제공 할 수 없다는 것입니다.

그리기를 Shape의 하위 클래스에 대한 매개 변수로 사용하지 않고 집계를 만드는 방법이 있습니까?

내가 그랬어

[FIRST 답변으로 업데이트], 그러나 나는 다음과 같은 문제를 얻는다.

public override void draw() 
     { 
      myDrawing.drawCircle(x, y, size); 
     } 

이 방법이 runned 경우, myDrawing에 문제가 : 모양의 내 서브 클래스 중 하나에서 나는 다음과 같은 방법이있다. 내가 오류는 다음과 같습니다

"NullReferenceException이 처리되지 않은했다 'System.NullReferenceException'는 ShapeDrawing.exe에서 발생 유형의 처리되지 않은 예외입니다."나는이 문제를 해결하려면 어떻게

?

감사합니다, Joren

+0

유일한 이유를 사용하지 않는 생성자을하기 위해선, 파생 클래스를 수 있도록했다입니다 일반적인 생성자 논리 (코드)이므로 파생 클래스가 그렇게하지 못하게하려면 클래스가 호출하지 않으며 'myDrawing'이 초기화되지 않습니다. –

+0

이제 모든 생성자 메서드에서 언급되지 않았으므로 myDrawing이 null 인 문제가 있습니다. 또한, Drawing은 추상 클래스이기 때문에 myDrawing을 초기화 할 수 없습니다. – jorenwouters

답변

3

예, 추상 클래스의 생성자를 만들기 위해 도면

public Shape() 
     {} 
public Shape(Drawing drawing) 
     { 
      myDrawing = drawing; 

     } 
관련 문제