2009-07-31 57 views
7

很多时候它发生,我有私有方法而变得非常大,并包含重复的任务,但这些任务是如此特殊,它并没有什么意义,并提供给其他任何代码的一部分。C#:为什么我们不能有内在的方法/局部功能?

所以这将是非常伟大的,是能够创造在这种情况下,“内部方法”。

是否有任何技术(甚至是哲学?)限制,以防止C#从给我们呢?或者我错过了什么?自2016年

更新:这是来了,这就是所谓的“本地功能”。看到明显的答案。

+0

什么比私有方法的详细内?只有一种方法可用的方法?这只是看起来更多的代码而已。 – kenny 2009-07-31 09:59:04

+1

你错过了什么。自C#2.0以来,C#已具备此功能。 – 2009-07-31 15:31:58

+0

@Eric Lippert:你可以提供一些细节吗?谢谢。 – Marc 2010-01-20 13:47:45

回答

0

好像我们会得到什么我C#7 /的Visual Studio 15局部函数想:
https://github.com/dotnet/roslyn/issues/2930

private int SomeMethodExposedToObjectMembers(int input) 
{ 
    int InnerMethod(bool b) 
    { 
     // TODO: Change return based on parameter b 
     return 0; 
    } 

    var calculation = 0; 
    // TODO: Some calculations based on input, store result in calculation 

    if (calculation > 0) return InnerMethod(true); 
    return InnerMethod(false); 
} 

太糟糕了,我不得不等待超过7年为这:-)

另请参阅早期版本的C#的其他答案。

14

好了,我们可以有一个函数内部定义的“匿名方法”(我不建议使用他们组织了大量方法):

void test() { 
    Action t =() => Console.WriteLine("hello world"); // C# 3.0+ 
    // Action t = delegate { Console.WriteLine("hello world"); }; // C# 2.0+ 
    t(); 
} 
7

如果事情是比一般的好漫长而复杂做法是将其重构为一个单独的类(正常或静态 - 根据上下文) - 在那里,你可以有私有方法,这将是具体仅此功能。

2

我知道有很多人不喜欢的区域,但是这是他们可以通过分组的具体方法为区域证明是有用的情况。

1

如果你的方法变得太大,可以考虑把它在一个单独的类,或创建私有的辅助方法。一般来说,无论何时我通常会写评论,我都会创建一个新方法。

2

你能给出一个更具体的例子?读您的文章后,我有以下印象,这当然只是猜测的,由于有限的信息:

  • 私有方法不可用在类的外部,因此不会有任何其他代码反正隐藏。
  • 如果你想隐藏在同一类的其他代码的私有方法,你的类可能是大而可能违反单一职责原则。
  • 看一看匿名委托的lambda表达式。这不完全是你要求的,但他们可能会解决你的大部分问题。

阿希姆

0

更好的解决方案是重构该方法来分离类。在初始类中创建此类的实例作为专用字段。公开大型方法并将大型方​​法重构为多个私有方法,因此它将清楚它的功能。

相关问题