【问题标题】:What would be the purpose of having a static method? [duplicate]使用静态方法的目的是什么? [复制]
【发布时间】: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


【解决方案1】:

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

参考:https://www.c-sharpcorner.com/UploadFile/abhikumarvatsa/static-methods-in-C-Sharp/#:~:text=A%20static%20method%20in%20C%23,all%20objects%20of%20that%20Type

【讨论】:

    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 2012-08-14
    • 2012-12-28
    • 2015-10-15
    • 2011-11-16
    • 1970-01-01
    • 2012-06-10
    • 2016-05-30
    相关资源
    最近更新 更多