我有繪圖程序,用戶可以繪製一個橢圓或一條線,這兩者都從形狀派生。我創建一個橡皮筋,並根據我說的話,用戶是借鑑繼承問題
rubberBand = new Ellipse();
//or
rubberBand = new Line();
,但如果我設置橡皮筋行,我無法訪問X1 X2等,它說,形狀不包含定義的X1。我嘗試創建一個橢圓並將其轉換爲一行,但仍然是同一個問題。我該如何解決這個問題?
我有繪圖程序,用戶可以繪製一個橢圓或一條線,這兩者都從形狀派生。我創建一個橡皮筋,並根據我說的話,用戶是借鑑繼承問題
rubberBand = new Ellipse();
//or
rubberBand = new Line();
,但如果我設置橡皮筋行,我無法訪問X1 X2等,它說,形狀不包含定義的X1。我嘗試創建一個橢圓並將其轉換爲一行,但仍然是同一個問題。我該如何解決這個問題?
這聽起來像是一個基本的多態性問題。想想你實際上想做什麼 - 例如,一條線有2個點(X1/Y1和X2/Y2)。橢圓(橢圓形)沒有這樣的屬性 - 它有一個寬度,也許和一個高度,可能還有一個X和Y座標(或一個位置屬性)。
我猜你試圖調整邊界和/或位置的形狀,當用戶用鼠標拖動它。在這種情況下,您需要爲形狀定義的操作取決於它的形狀。對於一條線,你需要編寫一個調整X2和Y2(或其他)的方法。對於橢圓,您可能需要另一種方法來調整具有寬度,高度,左側和頂部屬性的形狀。那麼你只需要根據你正在處理的形狀來確定要調用哪一個。
我看到你在說什麼,我將不得不有一個形狀類,其中包含橢圓和線的屬性,然後從該類派生,並重寫DefiningGeometry。 – mihajlv
你需要想一想里氏替換原則:
http://www.objectmentor.com/resources/articles/lsp.pdf http://www.oodesign.com/liskov-s-substitution-principle.html
謝謝,我聽說過它。 – mihajlv
你可以發佈你的行類的聲明? Ellipse和Line都有相同的基類嗎?他們應該。 –
@Don Quixote是的,他們都來自Shape。 – mihajlv