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

标签 c#

使用下面的代码,Resharper 会引发“构造函数中的虚拟成员调用”警告:

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

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

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

    private void SetName()
    {
        DisplayName = "User Details"; 
    }
}

为什么一个发出警告而另一个不发出警告?第二种方法是否正确,或者它是否超出了 ReSharper 可以检测为潜在危险的限制?

最佳答案

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

这里的教训很简单:
没有警告并不意味着没有什么可警告的。

关于c# - 构造函数中的虚拟成员调用 - 为什么一个可以,另一个不行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686503/

相关文章:

C# Tcp 丢失数据包?

c# - 使用 AsParallel() 时无法获取与 Windows 应用程序关联的文件的文件图标

c# - 引用许多程序集是否有负面影响?

c# - 为什么在与 null 比较时转换为对象?

c# - 从 Controller .Net Core 2.1 调用 Signalr 方法

C# 无法从 DbContext 中删除对象

c# - WPF - 是否可以否定数据绑定(bind)表达式的结果?

c# - DocumentClient CreateDocumentQuery 异步

c# - 是否可以在资源键中有一个空格并在 ASPX 页面上使用它?

c# - 使用 System.Net.Mail 时格式化电子邮件的最佳方法是什么