如何将字段的固定值设置为类型?

时间:2016-08-25 23:36:39

标签: c# oop inheritance polymorphism

如果我有这种类的层次结构:

Class Shape
{
public bool closedPath;
}

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

我知道所有圈子都是封闭的路径。 如何将closedPath字段的值设置为这些默认值,而不需要在实例化该类的对象时分配其值?

2 个答案:

答案 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
}