C# - 类中的静态属性

时间:2011-08-06 11:39:10

标签: c#

我有以下代码:

    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();
            }
        }
   }

我是否更正,每次访问RefreshModuleData()方法时,每次访问都会共享两个私有静态变量?

4 个答案:

答案 0 :(得分:1)

  

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

是的,因为它们是静态字段,所以它们只会被实例化。当然,如果你没有在代码中的任何地方覆盖它们。

答案 1 :(得分:1)

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

注意:由于您当前执行更新列表,因此您当前的代码可能不是线程安全的(如果任何调用者查看锁定区域之外的列表 - “读”锁会做。)

作为次要注释,“锁定”会减少开销,并且具有相同的调用模式(因为您总是采用写锁定)。

答案 2 :(得分:0)

您的静态属性_moduleListLock仅在声明它的位置初始化一次。然而,每个Application Domain都有自己的静态变量副本。

答案 3 :(得分:0)

第一次引用ModuleLogic类的任何内容时,其静态构造函数(已定义)和所有静态字段都按照从上到下的顺序进行初始化。作为“静态”,整个应用程序中只有一个引用。