我对全局const的实现——是否有可能做一些不同的事情
本文关键字:不同的事 有可能 是否 const 全局 实现 | 更新日期: 2023-09-27 18:07:44
我是一名专业的php程序员,最近我开始了一个c#项目。这是我学习c#的第一步。
对于我的解决方案之一,我想使用全局const。我知道c#不允许在类作用域之外定义任何变量,但我还是想尝试实现类似的东西,即使只是为了学习语言中的不同技术。
我认为做类似全局Const的最好方法是定义一个静态类,让我们称之为Const,它将保存我所有的解决方案的"常量"。这个类将使用一个私有字典来保存这些值,一个名为'define()'的方法来在这个字典中设置一个值,'is_defined()'来检查const是否存在等等。
现在我要编写返回值的方法。显然,我可以使用方法 constst . getconst (' someeconstname ')并获得想要的值,但这是一个很长的路要在任何时候检索const我需要它。我想使用一些像PHP的魔法getter(如果你不熟悉它-你在类中定义一个名为'__get'的方法,它处理类中未定义的变量的所有请求)。然而,我在c#中找不到类似的东西。我能找到的最接近的东西是在运行时动态创建类内部方法的方法,以便每次在我的类中创建CONST时,我将创建一个"get方法",该方法将从私有字典中提取值(这不是经典形式的get方法,因为它不会返回变量,相反,它将在字典中查找值并返回它)。
基本上,我要问的是--是否有任何方法来定义全局常量?-(甚至id前一个问题的答案是肯定的)是否有一种方法来设置一个更好的getter动态定义变量?
非常感谢您的帮助
c#当然允许你声明公共常量,Math。是一个很好的例子。然而,这样做几乎总是错误的。问题是常量值直接编译到IL中。这使得它们非常高效,不需要访问内存来查找它们的值,但是当您将其设置为public时也非常危险。
出错的地方是为包含const声明的程序集部署更新。您可以更改该值,但是其他也使用该常量的程序集仍在使用旧值。牢牢地嵌在他们的IL里,这不会有好结果的。
公共常量只适用于清单常量。喜欢数学。圆周率,需要宇宙运行方式的剧烈变化才能改变它的值。像公司名称或产品名称这样的东西已经被怀疑了,名称总是在没有程序员参与的情况下改变。
对公共常量值使用readonly关键字