如果我有这种类的层次结构:
Class Shape
{
public bool closedPath;
}
class Circle : Shape
{
}
class Line: Shape
{
}
我知道所有圈子都是封闭的路径。
如何将closedPath
字段的值设置为这些默认值,而不需要在实例化该类的对象时分配其值?
答案 0 :(得分: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 :(得分: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
}