【发布时间】:2015-08-23 13:19:45
【问题描述】:
如果我只需要声明一些常量以在我的类中使用,并且没有真正需要将它们声明为静态的,即不会有多个实例共享该成员,那么将它们声明为静态有什么意义吗?使用静态成员和实例成员之间是否存在“成本差异”?请提供有关 java 和 C# 的信息。
另外,java的静态成员和C#的静态成员有区别吗?
【问题讨论】:
标签: java c# static-members
如果我只需要声明一些常量以在我的类中使用,并且没有真正需要将它们声明为静态的,即不会有多个实例共享该成员,那么将它们声明为静态有什么意义吗?使用静态成员和实例成员之间是否存在“成本差异”?请提供有关 java 和 C# 的信息。
另外,java的静态成员和C#的静态成员有区别吗?
【问题讨论】:
标签: java c# static-members
在 Java 中,常量不是隐式静态的;常量不是一个实际的语言规范,所以 Java 中的常量只是我们称之为常量的变量。
在 C# 中,常量是隐式静态的。常量是语言规范的一部分,并在documentation 中声明:
常量的访问就像它们是静态字段一样,因为常量的值对于该类型的所有实例都是相同的。您不使用 static 关键字来声明它们。
【讨论】:
如果你将常量声明为静态,那么你的程序将只使用一个内存位置来存储这个常量值,如果你不使用静态,那么每个对象都会单独存储这个常量。正如您所说,没有几个实例,在这种情况下,您要么将常量指定为静态,要么简单地声明它,两者的成本相同。
【讨论】:
出于多种原因,我通常将应用程序中的每个常量都声明为 private static final 变量。
static,所以这些变化会在每次通话中蔓延。这可以防止您意外地对同一个常量进行多个定义。static 时,您强制要求它必须以静态方式进行交互,即独立于运行时实例。如果没有在运行时封装成员变量的类的这种依赖关系,您可以更精确地控制与该类的交互,因为它确保您定义关于如何与类交互的精确规则。您会发现,您可以声明为 static 的常量和方法越多,您的软件就越灵活,因为对于应该如何操作某些值和行为几乎没有混淆。就个人而言,我总是将我的应用程序的所有功能声明为private static。如果一个类使用该功能作为其操作的一部分是有意义的,那么程序员可以将方法调用包装在另一个方法中并提供适当的成员变量数据。如果您的应用程序的另一部分需要使用该静态函数,您需要做的就是增加该函数的可见性。
【讨论】:
const 可能与final 相同,但我对语义的了解还不够,无法提供准确的解释!
private static readonly 或private const
我只需要声明一些要在我的类中使用的常量
不知道Java,但在C# 中,常量成员本质上隐含static。
请参阅MSDN Document: Constants (C# Programming Guide) 了解更多信息。引用参考文件:
常量被当作
static字段访问,因为值 对于该类型的所有实例,常量的值都是相同的。你不 使用static关键字来声明它们。
【讨论】:
Java。