C# 关于c的点(.)算子#

C# 关于c的点(.)算子#,c#,struct,static,enums,static-methods,C#,Struct,Static,Enums,Static Methods,很抱歉上次的帖子…这是另一篇 到目前为止,人们似乎使用(.)操作符: (1) 结构的进入构件 (2) 访问类的静态/常量成员 (3) 访问枚举类型的文本 (例如,dayofweek.cs的文件) 没有该结构/类/枚举的对象/实例 我知道运算符的意义可以取决于它的操作数 但有些在我看来有点奇怪 例如,在(3)的情况下: 用C#,我可以写: 星期一; 如果(a==DayOfWeek.Sunday)*做点什么…* 但在C语言中,我只能写: 星期一; 如果(a==星期日)*做点什么…* 例如,在(1

很抱歉上次的帖子…这是另一篇

到目前为止,人们似乎使用(.)操作符:

(1) 结构的进入构件

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

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

(例如,dayofweek.cs的文件)

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

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

但有些在我看来有点奇怪

例如,在(3)的情况下:

用C#,我可以写:

星期一;
如果(a==DayOfWeek.Sunday)*做点什么…*

但在C语言中,我只能写:

星期一;
如果(a==星期日)*做点什么…*

例如,在(1)的情况下:

在C语言中,只有当我们有了一个结构实例后,我们才能对它的成员进行操作

但在C#中,就像在中一样,我们可以直接使用结构的名称(即,
DataTime
)来访问其成员(即,
Maxticks
),即,
DataTime.Maxticks

这显然有些不同,对吗

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

**事实上,我不喜欢通过一个接一个的例子来学习,因为他们没有告诉我“如何使用它”,只是告诉我“我能用它做什么”;不过,这两个是不同的

在C语言中,只有在我们有了一个结构的实例之后,我们才能这样做 对其成员的操作

但在C#中,就像struct的源代码中的两件事一样 DataTime在c#中,我们可以直接使用 结构来访问其成员(即Maxticks),即DataTime.Maxticks

这显然有些不同,对吗

当类的方法是
static
方法时,我们可以使用类的名称,然后使用dot和我们想要调用的方法。在这种情况下,该方法属于类,而不属于我们使用new关键字创建的对象

根据C#规范:

方法是实现计算或操作的成员,可以 可以由对象或类执行。可以访问静态方法 通过课堂。实例方法通过的实例进行访问 这个班

关于
static
关键字的最佳解释之一可以在中找到


对于C#中的
struct
成员的访问,您使用与访问C#中的
成员相同的操作符,即点操作符。这就是为什么需要
DayOfWeek.Sunday

的原因,正如您所注意到的,
操作符用于访问成员

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


枚举不是
静态的
,但其成员的访问方式相同,因为您需要使用枚举名限定成员名。根据C#规范(V5.0,第14.3节):

从所有其他代码中,枚举成员的名称必须限定为 其枚举类型的名称。枚举成员没有任何已声明的 可访问性如果枚举成员包含枚举类型,则可以访问该成员 可以访问

的一个用途是限定某些内容(例如,当您显式声明类来自哪个命名空间时)


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

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

  • MyApp
    • 形式
      • 主要形式
        • ShowForm()
        • IsOpen()
    • 班级
      • 某类
        • SomeStaticMethod()
        • 非静态方法()
      • 其他类
        • 某物
          • 枚举值一
          • 枚举值二
    • 存储库
      • 本刊
尽管它们的用途和结构不同,所有这些都将使用点符号以类似的方式调用、导入或访问。在MainForm上调用静态的
ShowForm()
void将是
MyApp.Forms.MainForm.ShowForm()
,就像在
OtherClass
中引用枚举一样,将像
MyApp.Classes.OtherClass.SomeEnum.EnumValueTwo
一样


当您使用语句向类中添加一个
时,显然不需要执行完整的限定名称空间,但希望这能说明这个概念。

仔细阅读static关键字。我建议您阅读本节。这都是关于范围的。。。[instanceName].[instanceMember],[ClassName].[StaticMember],[EnumName].[EnumMember],此[CurrentInstanceMember]-左侧定义了作用域,即。基本上总是指“在左手边的范围内”,然后右手边是你试图访问的范围的哪一部分。非常感谢。。。但是对于DayOfWeek部分,DayOfWeek是一个枚举,而不是一个类;我在哪里可以找到一份官方文件,上面说可以使用
DayOfWeek.Sunday
检索枚举DayOfWeek的七个值之一“Sunday”?毕竟,这在C?@J.C.看来是不允许的。欢迎你,伙计。该链接提供您正在查找的文档。如果有帮助的话,请告诉我。非常感谢你的帮助!根据人们对我的反馈和我最近的经验,MSDN是C#程序员(尤其是fo