为什么在方法中使用static关键字

时间:2011-08-17 14:00:14

标签: static-methods

当我想到一些“静态”的东西时。我想到了一些不会改变的事情。这是否意味着非静态方法可以改变,但静态方法不会改变?他们的行为有何不同?

5 个答案:

答案 0 :(得分:4)

(假设你在这里谈论C# - 它意味着不同语言的东西略有不同,所以你明智地用你正在询问的问题来标记你的问题。)

这里的“静态”一词用于表示“与类型相关而不是类型的特定实例”。我相信它最初被使用是因为编译器可以确定静态成员的含义,而不是在执行时被动态确定动态的成员(例如,调用虚拟方法) )但它现在失去了很多意义:(

“静态=与类型本身相关,而不是实例”的含义在整个C#中是一致的,包括:

  • 静态变量/方法/事件/属性
  • 静态类(没有创建任何实例)
  • 静态构造函数(用于初始化类型本身)
  • 运算符( on 一个实例 - 值作为参数提供)

答案 1 :(得分:1)

静态方法不需要类实例。这是主要的区别。

  • 静态

    ClassName.MethodName();

  • 不是静态的

    var obj = new ClassName();  为obj.methodename();

答案 2 :(得分:0)

静态方法既不需要类的实例也不能隐式访问此类实例的数据(或此类,self,Me等)。

答案 3 :(得分:0)

他们的行为不同。如前所述,主要区别在于您不需要创建该方法的类的实例。变量也是如此。例如:

class Foo
{
    public static void Bar() { ... }
    public void Bar2() { ... }
}

Foo.Bar(); //ok
Foo.Bar2(); //error

但请记住,静态方法无法访问该类中的非静态变量/方法。

答案 4 :(得分:0)

它不是关于将要改变的方法。它是关于该方法正在运行的数据。如果它是一个静态方法,它所操作的数据不依赖于一个类型的实例。所以我们不需要一个实例来调用它。

根据方法操作的数据来思考。数据是否依赖于实例。如果不将方法标记为静态。