当我想到一些“静态”的东西时。我想到了一些不会改变的事情。这是否意味着非静态方法可以改变,但静态方法不会改变?他们的行为有何不同?
答案 0 :(得分:4)
(假设你在这里谈论C# - 它意味着不同语言的东西略有不同,所以你明智地用你正在询问的问题来标记你的问题。)
这里的“静态”一词用于表示“与类型相关而不是类型的特定实例”。我相信它最初被使用是因为编译器可以确定静态成员的含义,而不是在执行时被动态确定动态的成员(例如,调用虚拟方法) )但它现在失去了很多意义:(
“静态=与类型本身相关,而不是实例”的含义在整个C#中是一致的,包括:
答案 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)
它不是关于将要改变的方法。它是关于该方法正在运行的数据。如果它是一个静态方法,它所操作的数据不依赖于一个类型的实例。所以我们不需要一个实例来调用它。
根据方法操作的数据来思考。数据是否依赖于实例。如果不将方法标记为静态。