C#-类中的静态属性

C#-类中的静态属性,c#,C#,我有以下代码: internal class ModuleLogic { #region [Private Variables] private static ReaderWriterLockSlim _moduleListLock = new ReaderWriterLockSlim(); private static List<Module> _moduleList; #endregion

我有以下代码:

    internal class ModuleLogic
    {
        #region [Private Variables]
        private static ReaderWriterLockSlim _moduleListLock = new ReaderWriterLockSlim();
        private static List<Module> _moduleList;
        #endregion   

        public static void RefreshModuleData()
        {
            _moduleListLock.EnterWriteLock();
            try
            {
                ModuleData.RefreshModuleData(_moduleList);
            }
            finally
            {
                _moduleListLock.ExitWriteLock();
            }
        }
   }
内部类模块逻辑
{
#区域[私有变量]
私有静态ReaderWriterLockSlim _moduleListLock=new ReaderWriterLockSlim();
私有静态列表_moduleList;
#端区
公共静态无效RefreshModuleData()
{
_moduleListLock.EnterWriteLock();
尝试
{
ModuleData.RefreshModuleData(_moduleList);
}
最后
{
_moduleListLock.ExitWriteLock();
}
}
}
每次访问RefreshModuleData()方法时,都会为每次访问共享两个私有静态变量,对吗

我纠正了每次实例化这个类时,两个私有静态变量只实例化一次(第一次)并用于每个实例


是的,因为它们是静态字段,所以它们只会被实例化。当然,如果您没有在代码中的任何位置覆盖它们,那么这就是问题所在。

静态字段确实在所有调用之间共享。为了避免混淆,还可以将锁定字段设置为“只读”。列表字段可能不能是只读的,但请注意,更改列表中的内容(一旦在字段中可用)对您来说是个坏主意,因为它可能被多个线程使用

注意:因为看起来您当前确实更新了列表,所以您当前的代码可能不是线程安全的(如果任何调用方在锁定区域之外查看列表,则可以使用“读取”锁定)


作为一个次要注意事项,“锁”在这里的开销较小,并且调用模式相同(因为您总是使用写锁)。

您的静态属性
\u moduleListLock
仅在声明的地方初始化一次。但是,每个应用程序域都可以有自己的静态变量副本。

第一次引用ModuleLogic类时,它的静态构造函数(在定义的地方)和所有静态字段都会按照从上到下的顺序初始化。由于“静态”,整个应用程序中只有一个引用。

非常感谢。实际上,我有额外的代码可以在单独的线程上读取此列表,所以我将使用EnterReadLock来进行这些操作。我不想让读者互相封锁,但他们需要等待写入列表。