【问题标题】:What is the difference between public static, public and static method? [closed]公共静态,公共和静态方法有什么区别? [关闭]
【发布时间】:2013-01-08 10:02:23
【问题描述】:

我有一些关于 C# 中的方法范围以及 ASP.Net 中的最佳案例用法的相关问题:

  1. 在C#中,有什么区别:
    • public static 方法
    • public 方法
    • static 方法
  2. 我正在使用 MVC 和 web-services;就我的问题 #1 中的方法范围而言,每个method scope 类型的内存占用情况会产生什么差异,例如,static 在使用后会释放函数内存吗?

【问题讨论】:

    标签: c# asp.net-mvc-3


    【解决方案1】:

    public 本身表示这是一个基于实例的成员,外部调用者(有权访问类型本身的那些)可以访问。

    static 本身意味着该成员不是基于实例的:您可以在不需要任何特定实例(甚至根本不需要任何实例)的情况下调用它;如果没有可访问性限定符,则假定为非公开 - 因此外部调用者将无法访问该成员。

    public static 是一个static 方法,可供外部调用者访问。

    两种情况下的内存使用是相同的:方法中声明的任何变量都限定为方法调用本身(作为实现细节:通过堆栈;另外:我假设没有“捕获的变量”,也没有 @ 987654325@或yield用法),

    这里没有特定于 ASP.NET / MVC 的内容。然而,控制器上的“动作”方法是,IIRC,预计是公共/实例,所以 with public 修饰符,没有 static 修饰符。

    基本上:

    可访问性:

    • 未指定:默认为“私有”(或外部类的“内部”)
    • “private”:仅适用于该类型内的代码
    • “受保护”:可用于该类型或子类型内的代码
    • “内部”:可用于同一程序集中的代码
    • “受保护的内部”:“受保护”或(联合)“内部”
    • “public”:可供所有有权访问该类型的调用者使用

    静态/等:

    • 未指定:基于实例;需要一个实例,并且代码可以自动访问实例成员(通过this.)和static 成员
    • “静态”:不需要实例;代码只能自动访问static 成员

    【讨论】:

      【解决方案2】:

      没有访问说明符的静态方法将是私有的。您无法在课堂外访问它。

      考虑下面的类。

      class TestClass
      {
          public int MyProperty { get; set; }
          static void SomeStaticMethod()
          {
          }
      
          public static void SomeOtherStaticMethod()
          {
              SomeStaticMethod(); // You can use the static method inside
          }
      
          public void InstanceMethod()
          {
              SomeStaticMethod();
          }
      }
      

      当你使用它时:

      TestClass tc = new TestClass();
      tc.InstanceMethod();
      TestClass.SomeOtherStaticMethod();
      TestClass.SomeStaticMethod(); // Thats an error because SomeStaticMethod is private and not accessible
      

      【讨论】:

        【解决方案3】:

        默认情况下,类成员是私有的,因此如果您不指定静态方法是公共的,您将无法从类外部访问您的方法。

        有关访问修饰符的更多信息,请参阅: Access Modifiers (C# Programming Guide)

        【讨论】:

          【解决方案4】:

          人们很乐意为您提供示例,但这些内容已经在 Internet 上进行了详细记录,并且非常简单的搜索可以得出明确的结果。让我沉迷于你,找到关于主题的 MSDN 参考资料(两个主题,顺便说一下,成员访问和非实例成员并不严格相关):

          首先你有access modifiers,在这种情况下特别是public:

          公开

          类型或成员可以被任何其他代码访问 相同的程序集或引用它的另一个程序集。

          这个成员是不是static,这无关紧要。

          那么你有static, non-instance stuff:

          静态

          静态类和类成员用于创建数据和函数 无需创建类的实例即可访问。静止的 类成员可用于分隔数据和行为 独立于任何对象身份

          因此,任何差异都是可能的访问和“实例”规则的组合。

          内存管理是另一回事;无论访问和上下文如何,没有一种方法、属性、字段会神奇地减少内存,这是您作为开发人员必须在每一行代码中考虑的事情(在编码时借助 CLR 的内置内存管理适当)。

          【讨论】:

            【解决方案5】:

            public 是访问修饰符。所以无论在哪里应用它都指的是范围。

            【讨论】:

              【解决方案6】:
              static Foo
              

              不公开,这意味着它在课堂之外不可见。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2014-04-27
                • 2019-10-02
                • 1970-01-01
                • 2011-04-19
                • 2010-10-19
                • 1970-01-01
                相关资源
                最近更新 更多