方法内的方法

我正在用一些可重用的代码创build一个C#库,并试图在方法内部创build一个方法。 我有这样的一个方法:

public static void Method1() { // Code } 

我想要做的是这样的:

 public static void Method1() { public static void Method2() { } public static void Method3() { } } 

然后我可以selectMethod1.Method2Method1.Method3 。 很显然编译器对此并不高兴,任何帮助都不胜感激。 谢谢。

这个答案是在C#7出来之前写的。 在C#7中,您可以编写本地方法。

不,你不能这样做。 你可以创build一个嵌套的类:

 public class ContainingClass { public static class NestedClass { public static void Method2() { } public static void Method3() { } } } 

你会打电话给:

 ContainingClass.NestedClass.Method2(); 

要么

 ContainingClass.NestedClass.Method3(); 

不会推荐这个。 通常使用公共嵌套types是一个坏主意。

你能告诉我们更多关于你想要达到的目标吗? 可能有更好的方法。

如果通过嵌套方法,你的意思是只能在该方法中调用的方法(就像在Delphi中),你可以使用委托。

 public static void Method1() { var method2 = new Action(() => { /* action body */ } ); var method3 = new Action(() => { /* action body */ } ); //call them like normal methods method2(); method3(); //if you want an argument var actionWithArgument = new Action<int>(i => { Console.WriteLine(i); }); actionWithArgument(5); //if you want to return something var function = new Func<int, int>(i => { return i++; }); int test = function(6); } 

是的,当C# 7.0发布时, 本地函数将允许你这样做。 你将能够有一个方法,在一个方法内:

 public int GetName(int userId) { int GetFamilyName(int id) { return User.FamilyName; } string firstName = User.FirstName; var fullName = firstName + GetFamilyName(userId); return fullName; } 

您可以用完整的代码在您的方法中定义委托,并在需要时调用它们。

 public class MyMethods { public void Method1() { // defining your methods Action method1 = new Action( () => { Console.WriteLine("I am method 1"); Thread.Sleep(100); var b = 3.14; Console.WriteLine(b); } ); Action<int> method2 = new Action<int>( a => { Console.WriteLine("I am method 2"); Console.WriteLine(a); } ); Func<int, bool> method3 = new Func<int, bool>( a => { Console.WriteLine("I am a function"); return a > 10; } ); // calling your methods method1.Invoke(); method2.Invoke(10); method3.Invoke(5); } } 

总是有一种替代方法,在类中使用一个嵌套的类,这个类将不能从外部看到并调用它的方法,如:

 public class SuperClass { internal static class HelperClass { internal static void Method2() {} } public void Method1 () { HelperClass.Method2(); } } 

从C#7.0开始,你可以这样做:

  public static void SlimShady() { void Hi([CallerMemberName] string name = null) { Console.WriteLine($"Hi! My name is {name}"); } Hi(); } 

这就是所谓的本地function ,这就是你正在寻找的东西。

我从这里拿出了这个例子,但是进一步的信息可以在这里和这里find。

为什么你不使用类?

 public static class Helper { public static string MethodA() { return "A"; } public static string MethodA() { return "A"; } } 

现在您可以通过访问MethodA了

 Helper.MethodA(); 

你几乎在那里

 public static void Method1() 

应该

 public static class Method1{} 

难道你不想使用嵌套类吗?

这就是说,你似乎不尊重单一责任原则,因为你希望单一的方法一次做多件事情。

你为什么不在另一个方法中运行一个方法

public void M1(){DO STUFF}

public void M1(){DO STUFF M1(); }