c# - 不同的静态只读属性实现(与字段)在 C# 中的行为如何?
问题描述
想问几个关于 .NET 平台在运行时如何在其内部工作中处理静态变量的问题。
注意:这是出于教育目的,而不是出于性能问题。
考虑以下三个变量定义:
using System;
public static class UserProperties
{
public static Guid UserId1 { get { return new Guid("00000000-0000-0000-0000-000000000001"); } }
public static Guid UserId2 { get; } = Guid.Parse("00000000-0000-0000-0000-000000000001");
public static readonly Guid UserId3 = Guid.Parse("00000000-0000-0000-0000-000000000001");
}
第一:据我了解,使用UserId2
over有一个好处UserId1
,因为它不会在Guid
每次访问属性时都实例化一个新的,而是将单个实例化分配给一个支持字段,只要程序正在运行,该字段就会被维护。这种理解正确吗?
第二:使用UserId3
over有什么好处UserId2
吗?我怀疑会有,因为前者本身就是一个字段,而后者是一个自动属性,我认为每次引用它时都会调用一个方法,但我不确定。
最后:如果确实存在差异(是的,在这个特定示例中可以忽略不计,但仍然存在),它们是否通过优化变得不存在 - 即编译器或 JIT 是否发出完全相同的指令?
谢谢!
解决方案
推荐阅读
- python - 模型不可行或无界使用 python Gurobi
- php - 使用 PHP 检查 txt 文件中的电子邮件是否存在
- c++ - 未解析的外部符号 _MsiLocateComponentW@12
- reactjs - 如何在钩子上扩展 React 功能组件?
- angular - 如何在单页网站 Angular 9 中管理路由
- r - RStudio“运行文档”不生成html文件
- postgresql - 如何将 LocalDateTime 提供给 jpa/hibernate 查询?
- c# - 如何选择值不为零的列
- regex - 如何在 Pandas 中组合 Regex Findall 的输出
- python - 从实数行中排除区间