抽象类中的抽象属性。重点是什么?

时间:2016-10-12 10:06:50

标签: c# inheritance abstract-class

我刚刚开始使用抽象类,但我想知道在抽象类中使用抽象属性。 为什么要在已经抽象的类中创建属性摘要?无论是否抽象,该物业都将被曝光。在什么情况下,在抽象类中使属性抽象是有利的? 也许有点愚蠢/基本的问题,但到目前为止我还没有我自己说过的情况“呃这个确切的属性在这个抽象的类中应该是抽象的”。

考虑这个例子..你会使任何属性抽象吗?为什么?

public abstract class BaseError
{
    public string Title { get; set; } = "";
    public string Description { get; set; } = "";
    public Exception Exception { get; set; }
    private DateTime CreatedDateTime { get; set; } = DateTime.Now;

    public BaseError()
    {

    }
}

1 个答案:

答案 0 :(得分:2)

应该注意的是,您在示例中没有abstract properties。那些是auto properties;他们有一个隐藏的支持领域。

抽象属性

属性是get和set方法的组合,不需要通过设置和读取后备字段来实现它们。

派生类可能决定向属性添加验证,将其存储在支持字段之外的其他内容中,在属性更改值时添加事件,将其实现为常量,抛出异常等。

要定义抽象属性,请遵循以下示例:

public abstract double x
{
    get;
    set;
}

请注意abstract关键字。

使用抽象属性会强制派生类使用override关键字提供实现。

自动属性

自动属性是使用隐藏的支持字段实现的属性。与抽象属性类似,他们没有吸气剂或者固体物质。

从您的示例中获取,这是一个自动属性:

public string Title { get; set; } = "";

这里,编译器将生成一个隐藏的后备字段来存储属性的值,并且它将在构造时设置为""(当创建类的对象时)。

自动属性,优于公共领域。特别是如果未来的实现需要改变属性的行为,他们可以在不改变类的接口的情况下这样做。

推荐阅读:Properties vs. Public Variables