2016-08-25 22 views
0

私はクラスのこの階層がある場合:ここでフィールドへの固定値をタイプに設定するにはどうすればよいですか?

Class Shape 
{ 
public bool closedPath; 
} 

class Circle : Shape 
{ 
} 
class Line: Shape 
{ 
} 

は、私はすべての円が閉じパスであることを知っているが。 closedPathフィールドの値を、そのクラスのオブジェクトをインスタンス化するときにその値を割り当てる必要なしに、これらのデフォルト値に設定する方法はありますか?

答えて

2

あなたは仮想読み取り専用プロパティとしてあなたclosedPathを宣言して、子孫のクラスでそれを定義することができます。あなたも検討するかもしれない

class Shape 
{ 
    public virtual bool closedPath {get;} 
} 

class Circle : Shape 
{ 
    public override bool closedPath => true; 
} 
class Line: Shape 
{ 
    public override bool closedPath => false; 
} 

物事は以下のとおりです。

にあなたのShapeクラスを変更
  • 抽象クラスまたはIShapeインタフェースに渡します。

  • また、読み取り専用フィールドで同じ結果を得て、そのフィールドをコンストラクタで初期化することもできます。

1

あなたは基本コンストラクタに値を渡すことができます

class Shape 
{ 
    public bool closedPath; 

    public Shape(bool closedPath) 
    { 
     this.closedPath = closedPath; 
    } 
} 

class Circle : Shape 
{ 
    public Circle() 
     : base(true) 
    { 
    } 
} 

class Line : Shape 
{ 
    public Line() 
     : base(false) 
    { 
    } 
} 

を次に、あなたが取得したい:

void SomeMethod() 
{ 
    Shape circle = new Circle(); 
    Console.WriteLine(circle.closedPath); // True 

    Shape line = new Line(); 
    Console.WriteLine(line.closedPath); // False 
} 
関連する問題