代码分析警告2214 – 如何最好地修复?

我有以下代码:

public partial class AuditLog : IBusinessEntity { public BusinessEntityType EntityType { get { return BusinessEntityType.AuditLog; } } ///  /// Constructor accepting parameter initialization arguments ///  ///  ///  ///  ///  public AuditLog(string userName, BusinessEntityType entity, AuditLogCommand command, string commandText) { this.Timestamp = DateTime.Now; this.UserName = userName; this.Entity = entity.ToString(); this.Command = command.ToString(); this.CommandText = commandText; } } 

这是生成CA2214警告。 BusinessEntityTypeAuditLogCommand方法参数都是枚举。 我不知道这里有什么问题,因此我不确定如何满足警告。

谢谢。

您的一个或多个属性是虚拟的吗? 那就是为什么,因为CA2214是“不要在构造函数中调用可覆盖的方法”警告。

以下是MSDN规则的推理:

调用虚方法时,直到运行时才会选择执行该方法的实际类型。 当构造函数调用虚方法时,调用该方法的实例的构造函数可能尚未执行。

意味着如果有人从您的类inheritance并覆盖在构造函数中访问的方法或属性 – 那么在inheritance类的构造函数运行之前,将覆盖重写实现。 如果重写实现依赖于构造函数中设置的状态,则可能会导致问题。

要满足警告,您需要使构造函数中访问的属性和方法非虚拟(如果适当,可以使类型密封)。