2011-08-22 119 views
1

我来自obj-c背景,看着一些C#代码。在窗口中的部分子类,我认为这在代码的顶部:C#中的私有静态成员变量

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

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

谢谢。

+0

该类的构造函数是什么样的 - 这是一个单例实现吗? – Dave

+0

你确定它有任何意义吗?可能只是执行不力的代码。不知道应用程序在做什么的更多信息很难说,但我没有看到为什么应该声明这些应用程序是静态的。 –

回答

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

这看起来像类创建MyMessage类型的辛格尔顿,然后使用上messageLock变量的锁控制访问了 - 很难验证,虽然没有完整的代码。

0

那么我可以回答第一个成员的用途。这是用于创建线程lock。一个用于标记哪个线程当前持有锁并可以开展业务的对象。我想第二个成员是用于线程,但没有其他代码很难回答。

所以这两个成员是privat静态的,这意味着只有这些变量的一个实例,不管有多少个MyMessage对象被创建,并且只能在MyMessage实例中访问。

0

看来MyMessage是一个单独的类,它在内部管理称为_f私有变量,它实际上是单实例

而且从名字上就猜测_messageLocklock语句中使用,以保护关键代码段,(如在多线程应用程序),如:

lock(_messageLock) 
{ 
     //critical section 
} 

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

0

这些静态成员变量存储的范围是可用于从该类创建的每个对象的东西 - 因此一个变量在0与多个对象之间共享。这些是私人的,所以他们只能在课堂上进行编码。

的_messageLock看起来像它可能意在锁定()语句中使用的对象,在类的地方有可能是:

lock(_messageLock) 
    { 
    // some code 
    } 

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

结合静态MyMessage - 我猜这是一种单身。在这里讨论了许多不同的C#单例模式MSDN article

0

我想你所要求的仅仅是'什么是静态字段',而不是像'其他人'似的,'在这里做什么特定的私有静态字段'在回答。

一个私有静态成员变量,例如你的例子中的变量是私有成员变量,可以被该类的ANY对象访问。您创建的任何实例MyMessage将能够访问这些成员变量。