c# - 如果只使用一次,使用局部函数有什么意义吗?

标签 c# methods refactoring local c#-7.0

假设我有这段代码:

public void Foo()
{
    // Do bar work
    // Do baz work
    // Do foobar work
}

而且我意识到我可以(而且应该因为它不止做一件事)将其重构为:

public void Foo()
{
    bar();
    baz();
    foobar();
}

private void bar()    { /* do bar work */ }
private void baz()    { /* do baz work */ }
private void foobar() { /* do foobar work */ }

但后来我意识到我永远不会在 Foo() 之外使用这些函数,所以这些函数只会让主页和自动完成变得困惑。我可以摆脱这个:

public void Foo()
{
    bar();
    baz();
    foobar();

    void bar()    { /* do bar work */ }
    void baz()    { /* do baz work */ }
    void foobar() { /* do foobar work */ }
}

这会让事情变得更整洁、更不困惑,但我现在真正做的是让这个方法变得更长而不是更短。

最佳答案

Which would make things neater and less clutter, but all I've really done now is made the method even longer instead of shorter.

不,你没有。您基本上是在说类似的话,就像一个类具有一个完成大量工作的方法和一个完成相同工作但具有多个更短且更易于维护的方法的类之间没有任何区别。

你的本地函数就像方法一样,它们包含在另一个方法中的事实并不排除整体更容易维护;功能封装在明确定义的范围内。

关于c# - 如果只使用一次,使用局部函数有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50438563/

相关文章:

c# - 是否可以包装特定的类或方法并将它们分配给线程?

c++ - 用 const 复制相同的方法?

grails - 如何在Grails中重构

c# - 获取内网认证用户

c# - 枚举参数的 DefaultValue 和 RawDefaultValue 存在意外差异

javascript - 是否可以在 Java6 1.6 脚本引擎中从 JavaScript 调用 Java 方法?

c# - 如何将简单的类成员重构为更复杂的类型?

ruby-on-rails - 重构 Fat ActiveRecord 模型,现在怎么办?

c# - 在用户控件(代码隐藏)中为 wpf 文本框更改 'isenabled'

c# - 获取当前用户的 NetworkCredential (C#)