What's a “static method” in C#?
将静态关键字添加到方法中意味着什么?
1 2 3 | public static void doSomething(){ //Well, do something! } |
你能把
与常规(实例)函数不同,
例如:
1 2 3 4 | class SomeClass { public int InstanceMethod() { return 1; } public static int StaticMethod() { return 42; } } |
要调用
1 2 3 4 5 6 | SomeClass instance = new SomeClass(); instance.InstanceMethod(); //Fine instance.StaticMethod(); //Won't compile SomeClass.InstanceMethod(); //Won't compile SomeClass.StaticMethod(); //Fine |
从另一个角度来看:考虑对单个字符串进行一些更改。例如,您希望将字母设为大写等。为这些操作创建另一个名为"工具"的类。"工具"类的实例没有意义,因为该类中没有任何可用的实体(与"人"或"老师"类相比)。所以我们使用static关键字来使用"tools"类而不创建任何实例,并且当您在类名后面按点("tools")时,您可以访问所需的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati")); Console.ReadKey(); } } public static class Tools { public static string ToUpperCase(string str) { return str.ToUpper(); } } } |
静态方法、字段、属性或事件可以在类上调用,即使没有创建该类的实例。如果创建了类的任何实例,则不能使用它们访问静态成员。静态字段和事件只有一个副本,静态方法和属性只能访问静态字段和静态事件。静态成员通常用于表示不随对象状态变化的数据或计算;例如,数学库可能包含用于计算正弦和余弦的静态方法。静态类成员在membe的返回类型之前使用static关键字声明
静态函数意味着它与类(不是类的特定实例,而是类本身)相关联,即使不存在类实例,也可以调用它。
静态类意味着该类只包含静态成员。
很快,您就不能实例化静态类:前任:
1 2 3 4 5 | static class myStaticClass { public static void someFunction() { /* */ } } |
你不能这样做:
1 |
您只能:
1 | myStaticClass.someFunction(); |
向方法中添加"static"关键字时,意味着基础实现为类的任何实例提供相同的结果。不用说,结果随参数值的变化而变化。
静态变量不与类的对象链接。它可以使用类名访问。类的所有对象都将共享静态变量。
通过将函数设置为静态,它将限制该文件中该函数的访问。
静态关键字在应用于类时,告诉编译器创建该类的单个实例。这样就不可能"新建"类的一个或多个实例。静态类中的所有方法本身都必须声明为静态。
非静态类的静态方法是可能的,而且通常是可取的。例如,工厂方法在创建另一个类的实例时通常被声明为静态的,因为这意味着不需要包含factor方法的类的特定实例。
有关如何、何时和在何处查看msdn的详细说明