2017-10-20 87 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(); 
    } 
} 

唯一的問題是,形狀的子類,現在繪製的參數時,需要被實例化的類之一。唯一的問題是,繪圖不能作爲這些類的參數(由於程序的某些推理)。

是否有一種方法可以在不使用Drawing作爲Shape子類的參數的情況下進行聚合?

[更新到第一個答案]

我這樣做,但我得到了下面的問題。在我的Shape的子類之一,我有以下方法:

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

當此方法是拼命地跑,有一個與myDrawing問題。我得到的錯誤是:

「的NullReferenceException是未處理的類型的未處理的異常‘System.NullReferenceException’發生在ShapeDrawing.exe。」

我該如何解決這個問題?

問候, 淨蓮

+0

的唯一原因,使一個構造一個抽象類的構造函數,就是讓派生類有一個常見的構造函數邏輯(代碼),所以如果你不想讓派生類做這些,那麼沒有類會調用它,myDrawing永遠不會被初始化。 –

+0

現在我遇到了myDrawing等於null的問題,因爲它在任何構造函數方法中都沒有提及。另外,myDrawing永遠不能初始化,因爲Drawing是一個抽象類。 – jorenwouters

回答

3

是的,你做不使用繪圖

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

     }