[英]Generic classes with shared static fields in C#
我有一個類似的通用類定義:
public sealed class MyClass<TProperty,TOwner>
{
...
}
現在,我想要MyClass<TProperty,TOwner>
任何實例,而不管TProperty或TOwner的類型如何共享哈希表。 我想到了使用Hashtable類型的受保護內部靜態字段創建一個內部MyClassBase並從中繼承。 我真的只希望MyClass的定義可以訪問此哈希表。
這是一個合理的方法嗎? 我無法密封MyClassBase,因此這可能會導致稍后打開一罐蠕蟲病毒...
還有其他方法嗎?
受保護的靜態哈希表是一種很好的方法(請確保對其進行同步)。 您不能有一個內部基類,其派生類是公共的-但是您可以通過將其默認構造函數設置為內部來防止其派生到程序集之外:
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;
}
}
}
另一種選擇是使用暴露的成員創建internal static class
,並僅從MyClass<T,U>
訪問它。 當然,它在您的部件中是可見的,但是與protected
成員相比,它很容易控制。 只要確保僅在MyClass<T,U>
它就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.