构造函数中的虚拟成员调用 - 为什么一个好,另一个不行?

Tow*_*own 7 c#

使用下面的代码,Resharper引发了一个'构造函数中的虚拟成员调用'警告:

public class UserDetailViewModel : Screen
{
    public UserDetailViewModel()
    {
        // DisplayName is a virtual member of Screen
        DisplayName = "User Details"; 
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,如果我更改代码,就像这样,警告就会消失:

public class UserDetailViewModel : Screen
{
    public UserDetailViewModel()
    {
        SetName();
    }

    private void SetName()
    {
        DisplayName = "User Details"; 
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么一个人发出警告而另一个没有?第二种方式是否以某种方式正确,或者它是否超出了ReSharper可以检测到的潜在危险的极限?

jal*_*alf 13

这只是ReSharper的一个限制.它应用了一堆启发式方法来查找它可以警告的代码,但它找不到所有内容.这样做需要解决暂停问题.这不可行.

这里的教训非常简单:
没有警告并不意味着没有什么值得警告的.