我刚刚开始使用抽象类,但我想知道在抽象类中使用抽象属性。 为什么要在已经抽象的类中创建属性摘要?无论是否抽象,该物业都将被曝光。在什么情况下,在抽象类中使属性抽象是有利的? 也许有点愚蠢/基本的问题,但到目前为止我还没有我自己说过的情况“呃这个确切的属性在这个抽象的类中应该是抽象的”。
考虑这个例子..你会使任何属性抽象吗?为什么?
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()
{
}
}
答案 0 :(得分:2)
应该注意的是,您在示例中没有abstract properties。那些是auto properties;他们有一个隐藏的支持领域。
属性是get和set方法的组合,不需要通过设置和读取后备字段来实现它们。
派生类可能决定向属性添加验证,将其存储在支持字段之外的其他内容中,在属性更改值时添加事件,将其实现为常量,抛出异常等。
要定义抽象属性,请遵循以下示例:
public abstract double x
{
get;
set;
}
请注意abstract
关键字。
使用抽象属性会强制派生类使用override
关键字提供实现。
自动属性是使用隐藏的支持字段实现的属性。与抽象属性类似,他们没有吸气剂或者固体物质。
从您的示例中获取,这是一个自动属性:
public string Title { get; set; } = "";
这里,编译器将生成一个隐藏的后备字段来存储属性的值,并且它将在构造时设置为""
(当创建类的对象时)。
自动属性,优于公共领域。特别是如果未来的实现需要改变属性的行为,他们可以在不改变类的接口的情况下这样做。