C# 为什么可以直接引用此类及其成员?

C# 为什么可以直接引用此类及其成员?,c#,object,properties,static,instantiation,C#,Object,Properties,Static,Instantiation,我遇到了以下代码: pc = new PendingCommands(pause, wait); PendingCommands.ProcessCommands = true; 我想知道两件事: 1) 编码人员是否打算编写:pc.ProcessCommands=true 2) 为什么第二行被允许?PendingCommands未标记为静态 如果我右键单击“pc”并选择“转到定义”或“转到声明”,它会将我带到此处(在同一类/文件中): 如果我右键单击“PendingCommands”(从任一点)

我遇到了以下代码:

pc = new PendingCommands(pause, wait);
PendingCommands.ProcessCommands = true;
我想知道两件事:

1) 编码人员是否打算编写:pc.ProcessCommands=true

2) 为什么第二行被允许?PendingCommands未标记为静态

如果我右键单击“pc”并选择“转到定义”或“转到声明”,它会将我带到此处(在同一类/文件中):

如果我右键单击“PendingCommands”(从任一点)并选择“Go to Definition”或“Go to Declaration”,它会将我带到这里(在单独的类/文件中):

“ProcessCommands”成员在“PendingCommands”类中定义如下:

public volatile static bool ProcessCommands = true;
我遗漏了什么吗?

看看这个:

public volatile static bool ProcessCommands = true;
注意
ProcessCommands
是静态的。这意味着它与类型(
PendingCommands
)相关,而不是该类型的实例

这几乎肯定不是一个好的设计(公共字段很少,静态可变字段很少,易失性字段很少),但它解释了为什么编写
PendingCommands.ProcessCommands=true是好的

不幸的是,很难知道它是否真的是静态的——它是否只是一个bug,或者它是否是在没有任何更多信息的情况下以这种方式设计的。(我会对仅仅基于该字段使用这个类感到紧张,但是…)

请注意,您提到“
PendingCommands
未标记为static”-它不是需要静态的类。静态类只是一个只有静态成员的类,不能被实例化(或用作变量类型等)。重要的是你正在访问的成员。

看看这个:

public volatile static bool ProcessCommands = true;
注意
ProcessCommands
是静态的。这意味着它与类型(
PendingCommands
)相关,而不是该类型的实例

这几乎肯定不是一个好的设计(公共字段很少,静态可变字段很少,易失性字段很少),但它解释了为什么编写
PendingCommands.ProcessCommands=true是好的

不幸的是,很难知道它是否真的是静态的——它是否只是一个bug,或者它是否是在没有任何更多信息的情况下以这种方式设计的。(我会对仅仅基于该字段使用这个类感到紧张,但是…)


请注意,您提到“
PendingCommands
未标记为static”-它不是需要静态的类。静态类只是一个只有静态成员的类,不能被实例化(或用作变量类型等)。重要的是您要访问的成员。

您可以通过类名访问任何类的
静态
字段,即使该类本身不是
静态
您也可以通过类名访问任何类的
静态
字段,即使该类本身不是
静态

1) 这是个错误吗?编码员的意思是写:
pc.ProcessCommands=true

可能-如果没有关于
PendingCommands
的完整文档,就无法知道

2) 为什么第二行被允许?PendingCommands未标记为静态

PendingCommands
类不能标记为
static
,但
ProcessCommands
属性是无效的

1) 这是个错误吗?编码员的意思是写:
pc.ProcessCommands=true

可能-如果没有关于
PendingCommands
的完整文档,就无法知道

2) 为什么第二行被允许?PendingCommands未标记为静态


PendingCommands
类不能标记为
static
,但
ProcessCommands
属性是可访问的。

ProcessCommands
,因为它是
静态的。删除
static
关键字,它将只能针对类的实例进行访问。i、 e.
pc


PendingCommands.ProcessCommands=true
可能是错误的,除非打算将
PendingCommands
用作单例。也就是说,该类只有一个实例,因此静态方法
ProcessCommands
将处理其唯一实例的所有“命令”。
ProcessCommands
可以访问,因为它是
静态的。删除
static
关键字,它将只能针对类的实例进行访问。i、 e.
pc


PendingCommands.ProcessCommands=true
可能是错误的,除非打算将
PendingCommands
用作单例。也就是说,该类只有一个实例,因此静态方法
ProcessCommands
将处理其唯一实例的所有“命令”。

编码者是否打算写:pc.ProcessCommands=true?
不,他没有
PendingCommands没有标记为static
Yes,但是
ProcessCommands
被声明为static,并且属于类而不是对象。
编码者的意思是写:pc.ProcessCommands=true吗?
No,他没有
PendingCommands未标记为static
Yes,但
ProcessCommands
声明为static,并且属于类而不是对象。文档?!?哈完整的文档?!?ROTFLMAO,文件?!?哈完整的文档?!?罗特福毛。
public volatile static bool ProcessCommands = true;