gpt4 book ai didi

c# - 静态只读变量初始化

转载 作者:行者123 更新时间:2023-12-03 03:03:43 25 4
gpt4 key购买 nike

我有一些字典对象在应用程序生命周期内不会改变。我计划使用静态只读变量,任何人都可以提供以下几点的输入。

  1. 直接初始化为静态只读属性与使用私有(private)只读静态变量备份的 GET 运算符的静态属性之间的区别。

  2. 使用它们是否有任何风险,因为我在网上读到不要使用公共(public)静态变量。这是否适用于这种情况。

最佳答案

I have some dictionary objects which doesn't change during application life time.

当您标记字典类型的变量只读时,您可以防止用另一个字典替换您分配的字典。您将该字典设置为只读,因为一旦调用者拿到该字典,他就可以自由地以任何他想要的方式进行更改,将其删除干净,或者设置不正确的值(毫无疑问是错误的)。如果您需要将字典设置为只读,请考虑借用只读包装器的实现 from this answer .

一般来说,与只读静态相比,在变量顶部添加属性或拥有{get;private set;}自动属性的唯一优点您是否有能力在 setter 中执行额外的检查,或者在 getter 中添加一些代码(例如,收集访问统计信息或进行日志记录)。通过反射(reflection)进入这个领域也有影响。看起来您并没有这样做,因此公开只读变量听起来很合适,并且不会带来额外的风险。

编辑:(关于使用反射)通过反射访问对象数据时,必须指定是访问属性 Xyz 还是字段 Xyz。相反,当您编写 C# 程序时,您编写 SomeClass.Xyz,编译器会判断它是适合您的属性还是字段。如果您创建一个公开字段 Xyz 的类,后来决定将其替换为属性 Xyz,请重新编译引用 Xyz 的代码直接就可以了。但是,如果您编写了一些通过反射 API 访问 Xyz 的代码,则需要重写该代码,因为编译器将无法为您捕获更改。

关于c# - 静态只读变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14884935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com