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

Ran*_*der 8 c#

我有以下代码:

    public partial class AuditLog : IBusinessEntity
    {
        public BusinessEntityType EntityType { get { return BusinessEntityType.AuditLog; } }

        /// <summary>
        /// Constructor accepting parameter initialization arguments
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="entity"></param>
        /// <param name="command"></param>
        /// <param name="commandText"></param>
        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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

dri*_*iis 14

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

以下是MSDN规则的推理:

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

这是什么意思是,如果有人从你的类继承,并覆盖了在访问方法或属性构造-那么对于继承类的构造函数运行之前的重写实现将受到重创.如果重写实现依赖于构造函数中设置的状态,则可能会导致问题.

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