什么是C#中的“静态方法”?

What's a “static method” in C#?

将静态关键字添加到方法中意味着什么?

1
2
3
public static void doSomething(){
   //Well, do something!
}

你能把static关键字添加到类中吗?那意味着什么?


与常规(实例)函数不同,static函数不与类的实例关联。

static类是只能包含static成员的类,因此不能实例化。

例如:

1
2
3
4
class SomeClass {
    public int InstanceMethod() { return 1; }
    public static int StaticMethod() { return 42; }
}

要调用InstanceMethod,需要类的一个实例:

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
myStaticClass msc = new myStaticClass();  // it will cause an error

您只能:

1
myStaticClass.someFunction();

向方法中添加"static"关键字时,意味着基础实现为类的任何实例提供相同的结果。不用说,结果随参数值的变化而变化。


静态变量不与类的对象链接。它可以使用类名访问。类的所有对象都将共享静态变量。

通过将函数设置为静态,它将限制该文件中该函数的访问。


静态关键字在应用于类时,告诉编译器创建该类的单个实例。这样就不可能"新建"类的一个或多个实例。静态类中的所有方法本身都必须声明为静态。

非静态类的静态方法是可能的,而且通常是可取的。例如,工厂方法在创建另一个类的实例时通常被声明为静态的,因为这意味着不需要包含factor方法的类的特定实例。

有关如何、何时和在何处查看msdn的详细说明