很多时候它发生,我有私有方法而变得非常大,并包含重复的任务,但这些任务是如此特殊,它并没有什么意义,并提供给其他任何代码的一部分。C#:为什么我们不能有内在的方法/局部功能?
所以这将是非常伟大的,是能够创造在这种情况下,“内部方法”。
是否有任何技术(甚至是哲学?)限制,以防止C#从给我们呢?或者我错过了什么?自2016年
更新:这是来了,这就是所谓的“本地功能”。看到明显的答案。
很多时候它发生,我有私有方法而变得非常大,并包含重复的任务,但这些任务是如此特殊,它并没有什么意义,并提供给其他任何代码的一部分。C#:为什么我们不能有内在的方法/局部功能?
所以这将是非常伟大的,是能够创造在这种情况下,“内部方法”。
是否有任何技术(甚至是哲学?)限制,以防止C#从给我们呢?或者我错过了什么?自2016年
更新:这是来了,这就是所谓的“本地功能”。看到明显的答案。
好像我们会得到什么我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#的其他答案。
好了,我们可以有一个函数内部定义的“匿名方法”(我不建议使用他们组织了大量方法):
void test() {
Action t =() => Console.WriteLine("hello world"); // C# 3.0+
// Action t = delegate { Console.WriteLine("hello world"); }; // C# 2.0+
t();
}
如果事情是比一般的好漫长而复杂做法是将其重构为一个单独的类(正常或静态 - 根据上下文) - 在那里,你可以有私有方法,这将是具体仅此功能。
我知道有很多人不喜欢的区域,但是这是他们可以通过分组的具体方法为区域证明是有用的情况。
如果你的方法变得太大,可以考虑把它在一个单独的类,或创建私有的辅助方法。一般来说,无论何时我通常会写评论,我都会创建一个新方法。
你能给出一个更具体的例子?读您的文章后,我有以下印象,这当然只是猜测的,由于有限的信息:
阿希姆
更好的解决方案是重构该方法来分离类。在初始类中创建此类的实例作为专用字段。公开大型方法并将大型方法重构为多个私有方法,因此它将清楚它的功能。
什么比私有方法的详细内?只有一种方法可用的方法?这只是看起来更多的代码而已。 – kenny 2009-07-31 09:59:04
你错过了什么。自C#2.0以来,C#已具备此功能。 – 2009-07-31 15:31:58
@Eric Lippert:你可以提供一些细节吗?谢谢。 – Marc 2010-01-20 13:47:45