0

このクラス図を考えてみましょう。

ここに画像の説明を入力してください

車の最高速度は200kphで一定で、バスは100kphです。これをサブクラスのconstmaxSpeedフィールドとして表します。

getMaxSpeed()にこの定数を返すようにするにはどうすればよいですか。これは私の問題を説明するための簡単な例であるため、getMaxSpeed()をすべてのサブクラスに複製しても役に立ちません。

それを行う方法はありますか?

constsを回避し、仮想プロパティを使用するソリューションについてはすでに検討しましたが、クラスのすべてのインスタンスがmaxSpeedフィールドを保持するため、スペースが無駄になります。

4

1 に答える 1

2

何かを仮想化することの全体的なポイントは、コンパイル時にどのメソッドを呼び出すかがわからないことです。そのため、aを呼び出す方法はありませconstvirtual。これに対する一般的な解決策はabstract public double MaxSpeed { get; }、基本クラスに入れてからoverride public double MaxSpeed { get { return 200; } }Car派生クラスに入れることです。

このソリューションにより、高度なJITコンパイラーは、aの特定のインスタンスVehicleが常にaであるCarと判断し、(期待どおりに)メソッド呼び出しをインライン化できるとget_MaxSpeed同時に、すべての車両に独自の最大速度を持たせることができます。

于 2012-04-21T19:58:42.157 に答える