C# 使用静态方法的目的是什么?

C# 使用静态方法的目的是什么?,c#,static,static-methods,C#,Static,Static Methods,虽然不是肯定的,但我很确定static关键字使方法和字段属于类而不是类的实例。对于字段,这对我来说很有意义,因为静态字段本质上变成了全局变量。但是对于方法,我不明白为什么使用静态方法是有利的还是有害的 例如,以下两者之间的区别是什么: class RandomClass { public static void Method() { Console.WriteLine("Hello World"); } } class Program { static voi

虽然不是肯定的,但我很确定static关键字使方法和字段属于类而不是类的实例。对于字段,这对我来说很有意义,因为静态字段本质上变成了全局变量。但是对于方法,我不明白为什么使用静态方法是有利的还是有害的

例如,以下两者之间的区别是什么:

class RandomClass {
  public static void Method() {
    Console.WriteLine("Hello World");
 }
}
class Program {
 static void Main(string[] args) {
  RandomClass.Method();
 } 
}

C#中的静态方法是一种只在类型级别(而不是对象级别)保留方法的一个副本的方法。这意味着,该类的所有实例共享该方法及其数据的相同副本。方法的最后更新值在该类型的所有对象之间共享


参考:.

不带
静态
您强制用户创建一个对象以调用函数,而实际上不需要任何对象。您还创建了一种(误导性的)外观,即方法的结果在某种程度上取决于调用它的对象。如果您理解对全局变量的需求,那么您可能还应该理解对全局函数的需求。这些方法与静态方法非常相似。只要能够调用
Math.Cos
,而不必先创建
Math
对象,这是非常方便的,不是吗?@Flash如果方法使用/引用类的任何其他非静态成员,则无法使其成为静态的。在这种情况下,您别无选择,只能使其非静态。所以剩下的唯一问题是如何处理可以是静态的方法,这正是我所链接的问题所在。从技术上来说,你是对的。从现在开始,您可以在所有代码中尝试这样做:)您很快就会发现这个有趣的模式:您的一些方法将获取封闭类的实例,因为您希望它访问类的实例变量,而静态方法通常无法做到这一点。这些方法应该被重写为非静态方法。@Flash我不这么说。您可能需要阅读整个讨论、答案和评论。
class RandomClass {
  public void Method() {
    Console.WriteLine("Hello World");
 }
}
class Program {
 static void Main(string[] args) {
  RandomClass randomObject = new RandomClass();
  randomObject.Method();
 } 
}