[英]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.