如果我需要在我的类中声明一些常量,并且没有真正需要将它们声明为静态,即没有多个实例共享该成员,是否有任何意义将它们声明为静态?是否有成本差异"使用静态和实例成员之间?请提供有关java和C#的信息。
而且,java的静态成员和C#的静态成员之间有区别吗?
答案 0 :(得分:1)
我需要声明一些常量才能在我的课程中使用
对Java
没有任何想法,但在C#
常数成员中的含义static
本质上是static
。
有关详细信息,请参阅MSDN Document: Constants (C# Programming Guide)。引用文件引用:
访问常量,就好像它们是
static
字段一样,因为值 对于该类型的所有实例,常量是相同的。你不 使用ruby -v
关键字来声明它们。
答案 1 :(得分:1)
由于多种原因,我通常会将我的应用程序中的每个常量声明为private static final
变量。
static
,所以这些变化会随着每次通话而降低。这样可以避免意外地对同一常数进行多次定义。static
时,您强制它必须以静态方式进行交互,即独立于运行时实例。如果没有在运行时封装成员变量的类的依赖性,您可以更精确地控制与该类的交互,因为它可以确保您定义有关如何与类进行交互的精确规则。您发现可以声明为static
的常量和方法越多,您的软件就越灵活,因为对于某些值和行为应该如何被操纵几乎没有混淆。就个人而言,我总是将我的应用程序的所有功能声明为private static
。如果一个类使用该功能作为其操作的一部分是有意义的,那么程序员可以将方法调用包装在另一个方法中并提供适当的成员变量数据。如果应用程序的另一部分需要使用该静态函数,那么您需要做的就是提高函数的可见性。
答案 2 :(得分:1)
在Java中,常量不隐含的静态;常量不是实际的语言规范,因此Java中的常量只是我们称为常量的变量。
在C#中,常量 隐式静态。常量是语言规范的一部分,并在documentation:
中说明访问常量就好像它们是静态字段一样,因为常量的值对于该类型的所有实例都是相同的。您不使用static关键字来声明它们。
答案 3 :(得分:0)
如果你将常量声明为静态,那么你的程序将只使用一个内存位置来存储这个常量值,如果你不使用静态,那么每个对象将分别存储这个常量。如你所说,没有几个实例,在这种情况下要么指定常量为静态,要么声明它只是两个成本相同。