c# - 关于c#的点(.)运算符

标签 c# struct static enums static-methods

对上一篇文章感到抱歉...这是另一篇文章。

到目前为止,我认为人们使用 (.) 运算符来:

(1) 访问结构成员

(2) 访问类的静态/常量成员

(3) 访问枚举类型的文字

(例如,dayofweek.cs http://referencesource.microsoft.com/#mscorlib/system/dayofweek.cs )

没有该结构/类/枚举的对象/实例

我知道运算符的含义可以取决于它的操作数;

但其中一些对我来说看起来有点奇怪。

例如(3)的情况:

在 C# 中,我可以这样写: 星期几; if (a == DayOfWeek.Sunday) *做某事...*;

但在 C 中,我只能写: 星期几; if (a == Sunday) *做某事...*

再举个例子,在(1)的情况下:

在C语言中,只有拥有一个结构体的实例后,才能对其成员进行操作;

但在 C# 中,就像在 https://stackoverflow.com/questions/24888864/two-things-about-source-code-of-struct-datatime-in-c-sharp 中一样,我们可以直接使用结构的名称(即DataTime)来访问其成员(即Maxticks),即DataTime.Maxticks

显然有一些区别,对吧?

我在哪里可以阅读此操作的完整教程或文档,说明如何使用此操作?只有语言规范?

**我实际上不喜欢通过一个一个地查看使用此操作的示例来学习的方式,因为他们没有告诉我“如何使用它”,而只是“我可以用它做什么”它”;不过,这两者是不同的。

最佳答案

正如您所注意到的,. 运算符用于访问成员。

如果该成员被标记为static,那么您可以通过类名引用它,因为一个类只有一个静态“实例”(并且它由运行时实例化)。这就是您在 DateTime.MaxTicks 中看到的。

枚举不是静态的,但它们的成员以相同的方式访问,因为您需要使用枚举名称限定成员名称。来自 C# 规范(v 5.0,第 14.3 节):

From all other code, the name of an enum member must be qualified with the name of its enum type. Enum members do not have any declared accessibility—an enum member is accessible if its containing enum type is accessible.

. 的用途之一是限定某些东西(比如当您显式声明一个类来自哪个命名空间时)。

基本上,只要您想访问某个成员,就可以使用.。只要您知道它是实例变量还是静态变量,您就会知道您是否需要该类型的实例,或者您是否可以只使用类名。 . 也可用于限定某物的名称,在为类指定 namespace 或使用枚举时使用。

关于c# - 关于c#的点(.)运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24891371/

相关文章:

c++ - 如何忽略来自 _CrtDumpMemoryLeaks 的误报内存泄漏?

java - 静态变量设置为 null 可用于 GC?

java - 为什么程序不允许初始化静态最终变量?

c# - 等待等待与解包()

go - 防止在结构初始化中丢失字段

c++ - "Was not declared in this scope"结构定义错误。 C++

c++ - 实例化结构体字段时的默认值

c# - 如何在 WPF 中创建计时器?

c# - `LoadFromCollection<T>(IEnumerable<T>, Boolean, TableStyles, BindingFlags, MemberInfo[])` 的 Epplus 示例

c# - 如何控制作为绑定(bind)源的TextBox文本何时更新目标值?