关于c#的点(.)运算符
本文关键字:运算符 的点 关于 | 更新日期: 2023-09-27 18:14:03
很抱歉上一个帖子…这是另一个
到目前为止,似乎人们使用(.)操作符来:(1)结构
的访问成员(2)访问类的static/constant成员
(3)枚举类型
的访问字面值(例如dayofweek.cs http://referencesource.microsoft.com/#mscorlib/system/dayofweek.cs)
而没有该结构体/类/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
),即DataTime.Maxticks
显然是有区别的,对吧?
我在哪里可以读到这个操作的详细教程或文档,告诉我如何使用这个操作?只有语言规范?
**实际上我不喜欢通过一个接一个地看例子来学习这个操作,因为他们没有告诉我"如何使用它",而只是"我能用它做什么";
您已经注意到,.
操作符是用来访问成员的。
如果该成员被标记为static
,那么您可以通过类名引用它,因为只有一个类的静态"实例"(并且由运行时实例化)。这就是你看到的DateTime.MaxTicks
。
枚举不是static
,但其成员的访问方式相同,因为需要用枚举名限定成员名。来自c#规范(v5.0,第14.3节):
在所有其他代码中,枚举成员的名称必须用枚举类型的名称。枚举成员没有任何声明可访问性—如果枚举成员包含枚举类型,则该成员是可访问的访问.
.
的一个用途是限定某些东西(比如当您显式声明一个类来自哪个命名空间时)。
基本上,只要你想访问某个对象的成员,就使用.
。只要知道它是实例还是静态变量,就可以知道是否需要该类型的实例,或者是否可以只使用类名。.
也可用于限定某物的名称,在为类指定名称空间或使用enum时使用。
在C语言中,只有当我们有一个结构体的实例之后,我们才能做对其成员的操作;
,但在c#中,就像在结构的源代码的两件事在c#中,我们可以直接使用NAME(即。, DataTime)结构来访问其成员(即, Maxticks),即DataTime.Maxticks
显然是有区别的,对吧?
当类的方法是static
方法时,可以使用类的名称,然后使用点和要调用的方法。在这种情况下,方法属于类,而不属于使用new关键字创建的对象。
来自c#规范:
方法是实现下列计算或操作的成员由对象或类执行。访问静态方法通过课堂。的实例来访问实例方法类。
关于static
关键字的一个最好的解释可以在MSDN中找到。
对于c#中struct
的成员的访问,使用与c#中访问class
成员相同的操作符,点操作符。这就是为什么需要DayOfWeek.Sunday
的原因。
可以把它看作是对名称空间的导航。您的项目结构可以是:
- MyApp
- 形式
- MainForm
- ShowForm ()
- IsOpen ()
- MainForm
- 类
- SomeClass
- SomeStaticMethod ()
- NonStaticMethod ()
- OtherClass
- SomeEnum
- EnumValueOne
- EnumValueTwo
- SomeEnum
- SomeClass
- 存储库
- ThisRepo
- 形式
尽管它们的目的和结构不同,但所有这些都可以使用点表示法以类似的方式调用、导入或访问。在MainForm上调用静态的ShowForm()
void将是MyApp.Forms.MainForm.ShowForm()
,就像在OtherClass
中引用enum将像MyApp.Classes.OtherClass.SomeEnum.EnumValueTwo
一样。
在向类添加using
语句时,显然不需要执行完整的限定名称空间,但希望这显示了概念。