【问题标题】:Static Class and Variables静态类和变量
【发布时间】:2015-01-12 19:28:59
【问题描述】:

只是好奇,

如果我有一个静态类,我是否还必须将变量定义为静态,因为我已经说过该类是静态的?

这更多是出于好奇,目前在我的静态类中,我的变量也定义为静态;但是,我想知道这是否真的有必要。

我正在使用 C#。

谢谢

【问题讨论】:

  • 静态在不同的语言中有不同的含义!!!您使用哪种语言>
  • 有语言标签是有原因的。添加了 C# 标签。
  • C#。我的意思更多,如果我将类定义为静态的(在这种情况下,说我没有它的实例)......那么变量会有所不同。就像将类定义为静态一样,这并不意味着包含的变量是静态的。
  • 在 C# 中,要访问静态类中的变量,必须将其声明为静态,否则将不会被看到。在某种程度上,静态就像一个单例类。它不是一个类的实例,而只是它本身......你不能创建静态类的实例。所以是的,它是必需的。

标签: c# class variables static


【解决方案1】:

是的,如果您使用static 关键字定义了您的类,您还需要对其所有成员使用static

【讨论】:

  • 好的,我猜这个例外是 CONST。我之所以这么说是因为我定义了一个常量,并且习惯性地添加了静态变量(就像我的所有其他变量一样),但它当然不喜欢这个(我的意思是常量和所有变量都有意义)
  • 对于成员,我只是指属性、方法和字段。常量是隐式静态的,因此它们不需要 static 关键字,而且正如您所发现的,它们是被禁止的。
【解决方案2】:

是的。来自MSDN

以下列表提供了静态类的主要功能:

  • 仅包含静态成员。
  • 无法实例化。
  • 已密封。
  • 不能包含实例构造函数。

【讨论】:

    【解决方案3】:

    这是一种快速测试方法。复制以下代码并将其粘贴到您的 IDE (Visual Studio)。然后取消注释两个注释行中的每一个,一次一个。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace StaticTest
    {
        static class Program
        {
            /**
             * Uncomment one line at a time and compile program.
             **/
    
            //public int NonStaticVariable = 0;
            //public static int StaticVariable = 0;
    
            static void Main(string[] args)
            {
            }
        }
    }
    

    你会注意到对于非静态变量,抱怨:

    'StaticTest.Program.NonStaticVariable':不能在静态类中声明实例成员

    这是因为,在 .NET 中,静态类只能包含静态成员。如果您想进一步阅读此内容,请点击此链接:http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

    【讨论】:

      【解决方案4】:

      如果您使用的是 Java,则不能使用静态上下文中的非静态变量。

      这还取决于您使用的语言(您应该告诉我们)。

      但是看看这里:

      Java: Non-static variable cannot be referenced from a static context

      C++: The static keyword and its various uses in C++

      希望对你有帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多