2012-04-21 31 views
0

考慮這個類圖:設計問題:試圖避免重複代碼,同時使用Consts

enter image description here

車有200公里的恆定最大速度和總線100千米每小時。我將其表示爲子類中的const maxSpeed字段;

如何讓getMaxSpeed()返回此常量。這只是一個簡單的例子來說明我的問題,所以將getMaxSpeed()複製到每個子類都無濟於事。

有沒有辦法做到這一點?

我已經考慮過避免const和使用虛擬屬性的解決方案,但是這個類的每個實例都會保存一個maxSpeed字段,這是浪費空間。

+4

您不需要虛擬屬性的字段。只要讓它'虛擬int MaxSpeed {得到{返回200; }}' – knittl 2012-04-21 19:19:01

+0

沒錯。那味道就像一個解決方案,儘管然後有一個函數調用。我希望const讓編譯器爲我植入這些數字 – wolfovercats 2012-04-21 19:20:31

+0

如果你想要一個'const',它不能是虛擬的。編譯器無法從派生類內聯常量。 – Gabe 2012-04-21 19:30:45

回答

2

讓事情變得虛擬的一點是,你不知道在編譯時調用什麼方法,所以const沒有辦法可以是virtual。對此的典型解決方案是在您的基類中有abstract public double MaxSpeed { get; },然後在Car派生類中有override public double MaxSpeed { get { return 200; } }

該解決方案允許一個複雜的JIT編譯器,以確定一個Vehicle的特定實例始終是一個Car並能夠內聯get_MaxSpeed方法調用(如你所希望看到),同時還允許每個車都有自己的最大速度。