4

独自の Point クラスから継承して、独自の Vector クラスを作成しています。Point クラスで x、y、z と呼んでいるフィールドを、Vector クラスでは i、j、k と呼びたいと思います。同じプライベート double 変数がプロパティをバックアップします。

私が使用しているアプローチは、Vector クラスで x、y、および z をプライベートとして宣言し、i、j、および k をパブリックとして設定することですが、次のように同じ get/setter を使用します。

これでうまくいくでしょうか?

public class ptsVector : ptsPoint
{
   private double x { get { return x_; } set { x_ = value; } }
   private double y { get { return y_; } set { y_ = value; } }
   private double z { get { return z_; } set { z_ = value; } }

   public double i { get { return x_; } set { x_ = value; } }
   public double j { get { return y_; } set { y_ = value; } }
   public double k { get { return z_; } set { z_ = value; } }
   // methods elided for clarity
}

Point クラスには、保護された double として x_、y_、および z_ があることに注意してください。

4

2 に答える 2

3

これらをどのように使用するかについて、より多くの情報が必要だと思います。ptsVector を ptsPoint として参照する必要がない場合は、継承を破棄します。ベクトルは点だと言えますか? そうでない場合、ポリモーフィズムはここでは適切ではありません。

この特定の例は別として、プロパティにエイリアスを設定することは、何があっても悪い考えだと思います。それは本当の利益のために多くの複雑さを追加します。

于 2012-04-23T03:30:01.157 に答える
2

私はこれを避けます: セマンティックな観点から言えば、それらは 2 つの異なる概念であり、一方が他方を実際に「継承」するわけではありません。どちらかといえば、ベクトル はポイント A からポイント B へのパスとして定義されているため、2 つのポイントが含まれていると言えます。

おっしゃる通り、クラスに機能を追加し始めると、心が痛むことになります。この継承から得ていると思われる利点は、意味的に正しい方法で追求するのが最善です。

于 2012-04-23T03:32:58.933 に答える