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

时间:2013-02-27 20:13:20

标签: c# object properties static instantiation

我遇到了这段代码:

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

我想知道两件事:

  

1)编码器是否意味着写:pc.ProcessCommands = true?

     

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

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

public static PendingCommands pc = null;

如果我右键单击“PendingCommands”(从任一点)并选择“转到定义”或“转到声明”,它会在此处(在单独的类/文件中):

public class PendingCommands : IDisposable

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

public volatile static bool ProcessCommands = true;

我错过了什么吗?

4 个答案:

答案 0 :(得分:2)

看看这个:

public volatile static bool ProcessCommands = true;

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

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

很好

很难知道它是否真的意味着是静态的 - 不管它只是一个错误,还是它的设计方式没有任何更多信息,遗憾的是。 (我只是在这个领域的基础上使用这个课我很紧张,但是......)

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

答案 1 :(得分:1)

即使班级本身不是static,您也可以通过班级名称访问任何班级的static个字段。

答案 2 :(得分:1)

  

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

可能 - 如果没有关于PendingCommands的完整文档,就无从知晓。

  

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

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

答案 3 :(得分:1)

ProcessCommands可以访问,因为它是static。删除static关键字,只有与该类的实例相关才能访问它。即pc

除非PendingCommands.ProcessCommands = true打算用作单身人士,否则

PendingCommands可能会出错。也就是说,只打算成为该类的一个实例,因此静态方法ProcessCommands将处理其唯一实例的所有“命令”。

相关问题