2017-11-01 10 views
-1

継承の使用例が不思議でした。具体的には、Axisクラスを持つC#の状況があります。このクラスでは、他のプロパティの中でもクラスに文字列名を付けることができます。したがって、Xという名前の軸を作成するために新しい軸( "X")を書くことができます。継承を命名規約として使用する

通常、X軸、Y軸、Z軸を作成したいので、Xという名前の3つのサブクラス、Y、Zの各要素で構成され、それぞれがコンストラクタ内でAxis名が何であるかを指定します。

現在のところ、Axisクラスにはたくさんのコードがありませんので、コードの再利用は非常に少ないです(ただし、変更することは可能ですが)。そして、公正であるために、(新しいX())の代わりに書くことがそれほど問題ではありません(新しいAxis( "X"))。

とにかく、このようなコードを書くのに不利な点があるのか​​、それともこのようなことをするのが一般的でないのかということになります。とても感謝しております!

+1

「軸」の静的プロパティが「X」、「Y」、「Z」と呼ばれるのはなぜですか?これらは 'Axis'または(オプションで)共有インスタンスの新しいインスタンスを返すことができます(' Axis'に可変状態があるかどうかによって異なります)。これらのサブクラスが異なるクラスである必要があると思いますか? –

+1

一般に、新しいクラスを作成する理由は、機能を追加することです。しかし、あなたがやっているような "プロキシ名"を作成すると、時には読みやすくすることができます。ストーリーのようなコードを読んでみて、そのストーリーを理解しやすいものに基づいて決定してください。 – theGleep

+0

これは正しいデザインであるというオッズはあまり良くありません。軸の方向は単なるプロパティであり、軸が別の方向を指しているからといって、メソッドをオーバーライドしたり追加したりすることは考えられません。 「X」を隠したい場合は、オブジェクトファクトリを検討してください。 –

答えて

0

芋、それはあなたがこの値でやろうとしているかに依存します:

  • タイトルとして使用してください:私は(あなたがグラフを作成している?)グラフを想像することができ、x軸とし代わりに時間を表します。 常にのx軸「X」に設定した場合でも、stringのコンストラクタパラメータは完全に上手くいきます。
  • 軸を識別するために使用します。コードの他の部分が活発に"X"軸を探す場合は、代わりに列挙型(AxisType.X)を使用します。
  • 何もありません:アプリケーションがこの値に依存しない場合は、代わりに「匿名軸」を使用し、パラメータを省略することはできますか?

各サブクラスが他と異なる動作をしていない限り、私はサブクラスを作成しません。

0

Damienと同じように、それらを簡単に作成する場合は、それらを作成するためのヘルパーメソッド/プロパティを用意することをお勧めします。

public class Axis 
{ 
    public Axis(string name) 
    { 
     Name = name; 
    } 

    public string Name { get; } 

    public static Axis X { get; } = new Axis("X"); 

    public static Axis CreateX() => new Axis("X"); 
} 

プロパティを所有している場合は、Axisが不変であることを確認する必要があります。あなたは常にプロパティで新しいものを返すことができますが、それはプロパティが何をすべきかではありません。

0

以下を考慮してください。

  1. xとyの変数名を持つことは一般的ではありません。このような名前は、他の開発者に変数とその使用の性質についての洞察を与えません。クラスの命名にも同じプリンシパルを使用する必要があります。 xとyと呼ばれるサブクラスを作成することはあまり有用な名前ではありません。私はxAxisやyAxisのような名前を付け加えることで、わかりやすく説明しています。
  2. XYZ座標は異なるプロパティを持っていますか、具体的にはそれぞれのタイプの異なるメソッドによって呼び出されますか?異なるタイプを使用する理由よりもそうでない場合。サブクラスは同等でも、交換可能でもありません。したがって、それらを互換性のあるものとする予定の場所では、いずれかの基本クラスを参照するか、各タイプを処理するコードが複数あることになります。
  3. クラスのインスタンス化を短絡しようとすると、ある種のサイジング制約の下にない限り、注意が必要です。
関連する問題