对于上一篇文章感到抱歉......这是另一篇文章。
到目前为止,我似乎有人使用(。)运算符:
(1)访问结构成员
(2)访问类的静态/常量成员
(3)访问枚举类型的文字
(例如,dayofweek.cs http://referencesource.microsoft.com/#mscorlib/system/dayofweek.cs)
没有该结构的对象/实例/ class / enum 。
我知道运营商的意思可能取决于其操作数;
但是其中一些看起来很奇怪。
例如,在(3)的情况下:
在C#中,我可以写:
DayOfWeek a;
if (a == DayOfWeek.Sunday) *do something...*
;
但在C中,我只能写:
DayOfWeek a;
if (a == Sunday) *do something...*
。
另一个例子,在(1)的情况下:
在C中,只有在我们有结构实例后才能对其成员进行操作;
但在C#中,就像在https://stackoverflow.com/questions/24888864/two-things-about-source-code-of-struct-datatime-in-c-sharp中一样,我们可以直接使用结构的NAME(即DataTime
)来访问其成员(即Maxticks
),即{ {1}}
显然存在一些差异,对吧?
在哪里可以阅读本操作的全面教程或文档,说明如何使用此操作?只有语言规范?
**我实际上并不欣赏通过逐个使用此操作的示例来学习它的方式,因为他们没有告诉我“如何使用它”,而只是“我可以做什么”它”;不过,这两者是不同的。
答案 0 :(得分:1)
正如您所注意到的,.
运算符用于访问成员。
如果该成员被标记为static
,那么您可以通过类名引用它,因为类中只有一个静态“实例”(并且它由运行时实例化)。这就是您在DateTime.MaxTicks
看到的内容。
枚举不是static
,但其成员的访问方式相同,因为您需要使用枚举名称限定成员名称。从C#规范(v 5.0,第14.3节):
从所有其他代码中,枚举成员的名称必须符合 枚举类型的名称。枚举成员没有任何声明 可访问性 - 如果枚举成员包含枚举类型,则可以访问该成员 可以访问。
.
的一个用途是限定某些东西(比如当你明确声明一个类来自哪个命名空间时)。
基本上,只要您想访问某个成员,就可以使用.
。只要您知道它是实例还是静态变量,您就会知道是否需要该类型的实例,或者您是否可以使用类名。 .
也可用于限定某些内容的名称,在为类指定名称空间或使用枚举时使用该名称。
答案 1 :(得分:0)
在C中,只有在我们有一个结构实例之后才能做到 对其成员的操作;
但在C#中,就像关于struct的源代码的两件事一样 在C#中的DataTime,我们可以直接使用NAME(即DataTime)的一个 访问其成员的结构(即Maxticks),即DataTime.Maxticks
显然存在一些差异,对吧?
当类的方法是static
方法时,我们可以使用类的名称,然后使用dot和我们想要调用的方法。在这种情况下,该方法属于该类,而不属于我们使用new关键字创建的对象。
来自C#规范:
方法是实现可以的计算或操作的成员 由一个对象或类来执行。访问静态方法 通过课堂。实例方法通过实例访问 上课。
关于static
关键字的最佳解释之一可以在MSDN中找到。
对于C#中struct
成员的访问,您使用相同的运算符来访问C#(点运算符)中class
的成员。这就是为什么你需要DayOfWeek.Sunday
。
答案 2 :(得分:0)
将其视为导航命名空间。您的项目结构可能是:
尽管它们的目的和结构不同,所有这些都可以使用点表示法以类似的方式调用,导入或访问。在MainForm上调用静态ShowForm()
void将为MyApp.Forms.MainForm.ShowForm()
,就像引用OtherClass
中的枚举一样,将像MyApp.Classes.OtherClass.SomeEnum.EnumValueTwo
一样。
当您向班级添加using
语句时,您显然不需要执行完全符合条件的命名空间,但希望这显示了这个概念。