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;