我正在使用代码分析,但是构造函数中的Overridable方法有问题
public partial class ControlAdmin : INotifyPropertyChanged
{
private readonly DatabaseManagement _dm = new DatabaseManagement();
// more stuff.....
}
答案 0 :(得分:1)
作为警告状态,您不应从构造函数中调用类的虚拟成员,因为在调用Method时,您的成员可能未完全初始化。请考虑以下示例。
class Foo
{
protected Bar _someBar;
public Foo()
{
_someBar = new Bar();
InitBar();
}
protected void InitBar()
{
_someBar.SomeImportentMethod();
}
}
class Baz : Bar
{
private int _id:
public Baz(int id) : base()
{
_id = id;
}
protected override InitBaz()
{
base.InitBaz();
_someBaz.Id = _id;
}
}
在此代码中,您尝试访问派生类(_id
)的成员变量。但是在执行InitBaz
时,该变量尚未赋值,因此您将使用错误的值初始化_someBaz
。 CA2214会警告您该危险。