【问题标题】:Resharper suggesting to make overloaded method privateResharper 建议将重载方法设为私有
【发布时间】:2013-12-10 10:36:37
【问题描述】:

我有类似下面的方法:

public string Method(string s)
{
    Console.WriteLine("Called Method(string s)");
    return s;
}

public string Method(object o)
{
    Console.WriteLine("Called Method(object o)");
    return Method(o == null ? null : o.ToString());
}

Resharper 说第一种方法

方法“方法”可以设为私有

我认为这是不正确的,因为如果我打电话:

Method(new SomeClass())

那么输出就是

被调用的方法(对象o)
调用方法(字符串 s)

如果我打电话

Method("some string")

输出是

被调用的方法(字符串 s)

那么,为什么 Resharper 会建议这种看似不正确的重构呢?

【问题讨论】:

  • resharper 根据您现有的代码提出建议,因此如果您在声明类之外没有使用Method(string s),您将得到这样的建议
  • 在使用 null 调用 Method(object o) 时会进入循环。我建议你写一些类似 'return o == null 的东西? string.Empty : Method(o.ToString());'.
  • @wonko79 实际上编译器会为输入选择最具体的重载。在null 的情况下,编译器将选择string 重载而不是object 重载,因为string 可以是null

标签: c# resharper


【解决方案1】:

ReSharper 足够聪明,可以确定特定类成员的实际使用位置。如果它没有在它所在的类型之外使用(甚至在派生类型中也没有),它将提供将成员标记为private。如果该成员也用于派生类,它将提供将其标记为protected

Source

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 1970-01-01
    • 2019-02-09
    • 2022-11-18
    • 2015-09-07
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多