2009-08-10 185 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>中使用它,它會沒事的。