【发布时间】:2020-10-18 11:35:36
【问题描述】:
虽然不是肯定的,但我很确定 static 关键字使方法和字段属于一个类而不是一个类的实例。对于字段,这对我来说很有意义,因为静态字段本质上变成了全局变量。但是对于方法,我不明白为什么制作静态方法会有利或有害。
例如,有什么区别:
class RandomClass {
public static void Method() {
Console.WriteLine("Hello World");
}
}
class Program {
static void Main(string[] args) {
RandomClass.Method();
}
}
和
class RandomClass {
public void Method() {
Console.WriteLine("Hello World");
}
}
class Program {
static void Main(string[] args) {
RandomClass randomObject = new RandomClass();
randomObject.Method();
}
}
【问题讨论】:
-
如果没有
static,当实际上不需要任何对象时,你会强制用户创建一个对象以调用该函数。您还创建了(误导性的)外观,即方法的结果以某种方式取决于调用它的对象。 -
如果您了解全局变量的必要性,那么您可能也应该了解全局函数的必要性。这些与静态方法非常相似。无需先创建
Math对象就可以调用Math.Cos非常方便,不是吗? -
@Flash 如果一个方法使用/引用该类的任何其他非静态成员,您不能将其设为静态。在这种情况下,您别无选择,只能使其成为非静态的。所以剩下的唯一问题是如何处理可以是静态的方法,这正是我链接的问题。
-
从技术上讲,你是对的。从现在开始,您可以在所有代码中尝试这样做 :) 您很快就会发现这种有趣的模式:您的一些方法将采用封闭类的实例,因为您希望它访问类的实例变量,这是一个静态的方法通常做不到。这些方法应该重写为非静态方法。
-
@Flash 我不会那样说的。您可能想阅读整个讨论、答案和 cmets。
标签: c# static static-methods