方法内的方法
我正在用一些可重用的代码创build一个C#库,并试图在方法内部创build一个方法。 我有这样的一个方法:
public static void Method1() { // Code }
我想要做的是这样的:
public static void Method1() { public static void Method2() { } public static void Method3() { } }
然后我可以selectMethod1.Method2
或Method1.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(); }