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

C# C中具有共享静态字段的泛型类#,c#,.net,generics,.net-3.5,static,C#,.net,Generics,.net 3.5,Static,我有一个与此类似的通用类定义: public sealed class MyClass<TProperty,TOwner> { ... } 公共密封类MyClass { ... } 现在,我希望MyClass的任何实例,无论TProperty或TOwner的类型如何,都能共享一个哈希表。我想用Hashtable类型的受保护内部静态字段创建一个内部MyClassBase,并从中继承。我真的只希望MyClass的定义能够访问此哈希表 这是一个合理的方法吗?我无法密封我的类库,

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

public sealed class MyClass<TProperty,TOwner>
{
    ...
}
公共密封类MyClass
{
...
}
现在,我希望
MyClass
的任何实例,无论TProperty或TOwner的类型如何,都能共享一个哈希表。我想用Hashtable类型的受保护内部静态字段创建一个内部MyClassBase,并从中继承。我真的只希望MyClass的定义能够访问此哈希表

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


还有其他方法吗?

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

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

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

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

另一个选项是使用公开的成员创建一个
内部静态类
,并且只从
MyClass
访问它。当然,它在程序集中是可见的,但与受保护的成员相比,它很容易控制。只需确保只在您的
MyClass
中使用它就可以了。

另一个选项是使用公开的成员创建一个
内部静态类
,并且只能从
MyClass
访问它。当然,它在程序集中是可见的,但与受保护的成员相比,它很容易控制。只要确保只在您的
MyClass
中使用它,它就会很好。

Oi,是的,睡眠不足,内部类显然比公共类更难访问。我有同步锁。。。感谢内部构造函数提示…哦,是的,睡眠不足,内部类显然比公共类更难访问。我有同步锁。。。感谢内部构造函数提示。。。