使用实例变量与传递参数有什么好处?

What benefits are there to using an instance variable vs passing a parameter?

构建 类 时,我的经验法则一直是传递参数,除非调用者无法访问它们。例如,我总是喜欢这个:

class Foo
{
    private FooData _data;
    public Foo(FooData data) { _data = data; }

    public string GetSomeValue()
    {
        var result = ProcessData(_data);
        return result;
    }

    private static string ProcessData(FooData data)
    {
        // do something with data and return the result
    }
}

关于这个:

class Foo
{
    private FooData _data;
    public Foo(FooData data) { _data = data; }

    public string GetSomeValue()
    {
        var result = ProcessData();
        return result;
    }

    private string ProcessData()
    {
        // do something with _data and return the result
    }
}

我在野外遇到过很多次第二个例子,但我一直没有找到一个很好的理由。 访问实例变量与使用方法参数相比有哪些优点和缺点?

更新: 我意识到这个问题的一些答案可能是基于意见的,但我正在寻找一种方法可以做到而另一种方法不能做到的事情,所以我可以关于何时使用每一个形成我自己的意见。

例如:

有关 首选不带参数的实例方法 的全面论证,请参阅 Robert C. Martin 的 Clean Code。在气味和启发式一章中,他清楚地浓缩了启发式:

F1: Too Many Arguments

Functions should have a small number of arguments. No argument is best, followed by one, two, and three.

(我的第 288 页。)