我经常遇到私有方法,这些方法变得非常大并且包含重复的任务,但这些任务非常具体,因此将它们提供给任何其他代码部分是没有意义的。
因此,在这种情况下能够创建'内部方法'真的很棒。
是否有任何技术(甚至是哲学?)限制阻止C#给我们这个?或者我错过了什么?
2016年更新:即将到来,它被称为“本地功能”。见标记答案。
答案 0 :(得分:14)
好吧,我们可以在函数中定义“匿名方法”(我不建议使用它们来组织一个大方法):
void test() {
Action t = () => Console.WriteLine("hello world"); // C# 3.0+
// Action t = delegate { Console.WriteLine("hello world"); }; // C# 2.0+
t();
}
答案 1 :(得分:7)
如果某些东西很长很复杂,通常是将它重构为一个单独的类(正常或静态 - 取决于上下文)的好习惯 - 那么你可以使用专用于此功能的私有方法。
答案 2 :(得分:2)
我知道很多人不喜欢地区,但是通过将您的具体方法分组到某个地区,这可能会证明是有用的。
答案 3 :(得分:2)
你能举一个更具体的例子吗?阅读完帖子后,由于信息有限,我有以下印象,当然只是猜测:
Achim的
答案 4 :(得分:1)
如果您的方法变得太大,请考虑将其放在单独的类中,或者创建私有帮助器方法。通常我会在通常写评论的时候创建一个新方法。
答案 5 :(得分:0)
更好的解决方案是重构此方法以分离类。在初始类中将此类的实例创建为私有字段。将大方法公之于众,并将大方法重构为几种私有方法,因此它的作用会很清楚。
答案 6 :(得分: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#早期版本的其他答案。