0

我遇到了这段代码:

pc = new PendingCommands(pause, wait);
PendingCommands.ProcessCommands = true;

我想知道两件事:

1) 编码员的意思是写:pc.ProcessCommands = true?

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

如果我右键单击“pc”并选择“Go to Definition”或“Go To Declaration”,它会将我带到这里(在同一个类/文件中):

public static PendingCommands pc = null;

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

public class PendingCommands : IDisposable

“ProcessCommands”成员在“PendingCommands”类中以这种方式定义:

public volatile static bool ProcessCommands = true;

我错过了什么吗?

4

4 回答 4

2

看这个:

public volatile static bool ProcessCommands = true;

注意ProcessCommands是静态的。这意味着它与类型 ( PendingCommands) 相关,而不是类型的实例。

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

很难知道它是否真的静态的——不幸的是,它只是一个错误,还是在没有更多信息的情况下以这种方式设计的。(我会担心仅仅在那个领域的基础上使用这个类,但是......)

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

于 2013-02-27T20:15:27.163 回答
1

您可以static通过类名访问任何类的字段,即使类本身不是static.

于 2013-02-27T20:16:23.223 回答
1

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

可能 - 如果没有关于PendingCommands.

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

PendingCommands可能未标记为static,但ProcessCommands属性是。

于 2013-02-27T20:16:36.810 回答
1

ProcessCommands是可访问的,因为它是static. 删除static关键字,它只能在与类的实例相关的情况下访问。即pc

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

于 2013-02-27T20:16:46.490 回答