考慮這個類圖:設計問題:試圖避免重複代碼,同時使用Consts
車有200公里的恆定最大速度和總線100千米每小時。我將其表示爲子類中的const maxSpeed字段;
如何讓getMaxSpeed()返回此常量。這只是一個簡單的例子來說明我的問題,所以將getMaxSpeed()複製到每個子類都無濟於事。
有沒有辦法做到這一點?
我已經考慮過避免const和使用虛擬屬性的解決方案,但是這個類的每個實例都會保存一個maxSpeed字段,這是浪費空間。
考慮這個類圖:設計問題:試圖避免重複代碼,同時使用Consts
車有200公里的恆定最大速度和總線100千米每小時。我將其表示爲子類中的const maxSpeed字段;
如何讓getMaxSpeed()返回此常量。這只是一個簡單的例子來說明我的問題,所以將getMaxSpeed()複製到每個子類都無濟於事。
有沒有辦法做到這一點?
我已經考慮過避免const和使用虛擬屬性的解決方案,但是這個類的每個實例都會保存一個maxSpeed字段,這是浪費空間。
讓事情變得虛擬的一點是,你不知道在編譯時調用什麼方法,所以const
沒有辦法可以是virtual
。對此的典型解決方案是在您的基類中有abstract public double MaxSpeed { get; }
,然後在Car
派生類中有override public double MaxSpeed { get { return 200; } }
。
該解決方案允許一個複雜的JIT編譯器,以確定一個Vehicle
的特定實例始終是一個Car
並能夠內聯get_MaxSpeed
方法調用(如你所希望看到),同時還允許每個車都有自己的最大速度。
您不需要虛擬屬性的字段。只要讓它'虛擬int MaxSpeed {得到{返回200; }}' – knittl 2012-04-21 19:19:01
沒錯。那味道就像一個解決方案,儘管然後有一個函數調用。我希望const讓編譯器爲我植入這些數字 – wolfovercats 2012-04-21 19:20:31
如果你想要一個'const',它不能是虛擬的。編譯器無法從派生類內聯常量。 – Gabe 2012-04-21 19:30:45