2009-08-10 141 views
0

共享静态字段我有一个类似的泛型类的定义:泛型类与C#

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

现在我想的MyClass<TProperty,TOwner>任何情况下,无论是类型TProperty或陶纳共享一个哈希表的。我想创建一个内部MyClassBase与一个受保护的Hashtable类型的内部静态字段,并从中继承。我真的只希望MyClass的定义能够访问这个散列表。

这是一个声音的方法吗?我不能封MyClassBase,所以这可能会导致蠕虫开放以后一罐......

对于这个没有其他的办法?

回答

3

受保护的静态哈希表是一个很好的方法(请确保您进行同步)。你不能有一个内部基类,其派生类是公共 - 但你可以通过它的默认构造函数内部防止其派生的装配外:

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; 
     } 
    } 
} 
+0

爱,是的,没有充足的睡眠,一个内部类显然不是一个公共类不太容易接近。 我有同步锁...感谢您的内部构造尖... – kitsune 2009-08-10 20:30:35

1

另一种选择是让一个internal static class带有裸成员,并且只能从MyClass<T,U>访问它。当然,这会是你的组件中可见,但是这很容易相比protected成员控制。只要确保只在你的MyClass<T,U>中使用它,它会没事的。