关于c#的点(。)运算符

时间:2014-07-22 15:21:55

标签: c# struct static enums static-methods

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

到目前为止,我似乎有人使用(。)运算符:

(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}}

显然存在一些差异,对吧?

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

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

3 个答案:

答案 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)

将其视为导航命名空间。您的项目结构可能是:

  • MyApp的
    • 表格
      • 的MainForm
        • ShowForm()
        • ISOPEN()
      • SomeClass的
        • SomeStaticMethod()
        • NonStaticMethod()
      • OtherClass
        • SomeEnum
          • EnumValueOne
          • EnumValueTwo
    • 存储库
      • ThisRepo

尽管它们的目的和结构不同,所有这些都可以使用点表示法以类似的方式调用,导入或访问。在MainForm上调用静态ShowForm() void将为MyApp.Forms.MainForm.ShowForm(),就像引用OtherClass中的枚举一样,将像MyApp.Classes.OtherClass.SomeEnum.EnumValueTwo一样。

当您向班级添加using语句时,您显然不需要执行完全符合条件的命名空间,但希望这显示了这个概念。