代码之家  ›  专栏  ›  技术社区  ›  kitsune

C中具有共享静态字段的泛型类#

  •  0
  • kitsune  · 技术社区  · 15 年前

    我有一个与此类似的通用类定义:

    public sealed class MyClass<TProperty,TOwner>
    {
        ...
    }
    

    现在我想要一些 MyClass<TProperty,TOwner> 不考虑要共享哈希表的tproperty或towner类型。我考虑创建一个内部MyClassBase,其中包含一个hashtable类型的受保护内部静态字段,并从中继承。我只希望MyClass的定义可以访问这个哈希表。

    这是一个合理的方法吗?我不能密封我的类库,所以这可能会导致以后打开一罐蠕虫…

    还有其他方法吗?

    2 回复  |  直到 15 年前
        1
  •  3
  •   Rex M    15 年前

    受保护的静态哈希表是一种很好的方法(请确保同步它)。不能有派生类是公共的内部基类,但可以通过将其默认构造函数设置为内部来防止在程序集外部派生该类:

    public abstract class MyBaseClass
    {
        internal MyBaseClass() { }
    
        private static Hashtable _hashtable;
    
        protected static Hashtable Hashtable
        {
            get
            {
                if(_hashtable == null)
                {
                    _hashtable = Hashtable.Synchronized(new Hashtable());
                }
                return _hashtable;
            }
        }
    }
    
        2
  •  1
  •   Sam Harwell    15 年前

    另一种选择是 internal static class 有一个暴露的成员,并且只能从 MyClass<T,U> . 当然,它在你的组件中是可见的,但是与 protected 成员。只要确保只在你的 myClass<t,u> 一切都会好起来的。