C#中的私有静态成员变量

时间:2011-08-22 16:09:05

标签: c# wpf

我来自obj-c背景,看着一些C#代码。在Window的部分子类中,我在代码的顶部看到了这一点:

public partial class MyMessage : Window
{
   private static object _messageLock = new object();
   private static MyMessage _f = new MyMessage();

这些类型的成员变量用于什么?我知道你可以为一个类创建一个静态变量,以便它用于整个类(经典的例子是一些int count变量,每次实例化该类时都会递增,以便跟踪该类的对象数量实例化)。在这种情况下,我不确定它的含义。

感谢。

5 个答案:

答案 0 :(得分:2)

private static object _messageLock = new object();
private static MyMessage _f = new MyMessage();

这看起来类创建了一个类型为MyMessage的Singleton,然后使用messageLock变量上的锁来控制对它的访问 - 虽然没有完整的代码但很难验证。

答案 1 :(得分:0)

我可以回答第一个成员的用途。这是用于创建线程lock。一个对象用于标记当前持有锁的哪个线程并且可以执行其业务。我猜第二个成员也用于线程化,但没有其余的代码很难回答。

所以这两个成员都是privat static,这意味着无论创建了多少个MyMessage对象,这些变量只有一个实例,并且只能在MyMessage实例中访问。

答案 2 :(得分:0)

似乎MyMessage是一个单例类,它在内部管理一个名为_f的私有变量,它实际上是单例实例

从名称来看,它猜测在_messageLock语句中使用lock来保护关键代码部分(例如在多线程应用程序中),如下所示:

lock(_messageLock)
{
       //critical section
}

查看:lock Statement (C# Reference) at MSDN

答案 3 :(得分:0)

这些静态成员变量存储作用域的内容,以便从该类创建的每个对象都可用 - 因此一个变量在0到多个对象之间共享。这些是私有的,因此它们仅适用于类中的代码。

_messageLock看起来可能是一个lock()语句中使用的对象,在类中的某个地方可能是:

  lock(_messageLock)
  {
     // some code
  }

或者某些使用其他形式的线程安全锁。这是为了创建某种形式的“仅一个线程”部分代码。

结合静态MyMessage - 我猜这是一种单身形式。这个MSDN article

中讨论了许多不同的C#单例模式

答案 4 :(得分:0)

我认为你所问的只是'什么是静态字段',而不是'这里有什么特定的私有静态字段',就像其他人似乎都在回答一样。

私有静态成员变量(例如示例中的变量)是私有成员变量,可以由该类的任何对象访问。您创建的MyMessage的任何实例都将能够访问这些成员变量。