c# - 属性在 C# 中实际上是如何工作的,例如 DateTime.Today?

标签 c# datetime methods properties dayofweek

我刚刚看到一些使用 struct DateTime.Today 的代码片段,但我无法理解它的内部工作原理。具体行如下:

if (DateTime.Today.DayOfWeek == DayOfWeek.Monday)

使用Go To Definition F12后,我看到Today静态方法返回 包含当前计算机中的日期信息的 DateTime 对象。我认为 Today 方法 作为构造函数包装器工作。我无法推断(更像是猜测)是如何在不首先实例化 Today 结构的情况下访问属性 DayOfWeek

有人可以解释一下这怎么可能吗?我唯一的猜测是,当 VS 将代码编译为 IL 时,可能会将这个语法糖转换为:

if ( (DateTime.Today()).DayOfWeek == DayOfWeek.Monday )

也许这就像水一样干净,但我是 C# 新手,所以我无法弄清楚。

提前致谢!

最佳答案

与您的问题相关,DateTime.TodayDateTimeProperty 类型,因此它具有 DateTime.DayOfWeek Property 作为任何常规DateTime 结构。

从更广泛的意义上讲,Properties 在 C# 中如何工作:在第一个近似中,为了更好地理解,您可以将 Properties 视为 Methods 伪装成看起来像一个字段,因此您将 Today 解释为某种假设的 GetToday() 方法在逻辑上是接近的,但不是“学术上精确的”(请参阅​​评论@CalebB)。

我建议您熟悉 .NET Properties ( https://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx ) 和 DateTime Structure ( https://msdn.microsoft.com/en-us/libraRy/system.datetime.aspx )

希望这会有所帮助。

关于c# - 属性在 C# 中实际上是如何工作的,例如 DateTime.Today?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095315/

相关文章:

c# - 将字符串数组连接到 "string1, string2 or string3"

javascript - 自动填充日期和时间

datetime - Delphi:删除目录中早于 X 天和/或具有特殊文件掩码 (*.xxx) 的文件

c# - 如何使用C#将文本文件保存在硬盘中

C# 正则表达式精确长度

ruby-on-rails - 计算与另一条记录关联的记录数量

java - 是否可以在java中创建实例的同一行中调用方法

java - 如何使用Java中类的成员方法从文件中读取数据?

c# - C#中通过反射创建匿名对象

php - 将 MySQL UTC 日期时间转换为 UNIX 时间戳