在Quartz.net中,如果我声明一个具有实现IJob接口的[PersistJobDataAfterExecution]
或[DisallowConcurrentExecution]
属性的类,那么继承此类的类是否也会继承这些属性?
[PersistJobDataAfterExecution]
[DisallowConcurrentExecution]
public abstract class ParentJob : IJob
{
//...
}
public class ChildJob : ParentJob
{
//...
}
因此,在上面的代码段中,ChildJob
是否具有[PersistJobDataAfterExecution]
或[DisallowConcurrentExecution]
属性?
如果不是,如何在不改变Quartz.net源代码的情况下继承它们?
答案 0 :(得分:2)
它们是继承的,不是因为它们被定义为可继承的,而是因为Quartz.net如何检查类上属性的存在:
public static bool IsAttributePresent(Type typeToExamine, Type attributeType)
{
return typeToExamine.GetCustomAttributes(attributeType, true).Length > 0;
}
在GetCustomAttributes(Type, bool)
中,bool
参数可以是:
true 搜索此成员的继承链以查找属性;否则,错误。属性和事件将忽略此参数;见备注。