2016-08-25 1 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 
}