c# – 派生静态成员
我有一个具有私有静态成员的基类:
class Base { private static Base m_instance = new Base(); public static Base Instance { get { return m_instance; } } } 我想从中派生出多个类: class DerivedA : Base {} class DerivedB : Base {} class DerivedC : Base {} 但是,此时调用DerivedA :: Instance将返回与DerivedB :: Instance和DerivedC :: Instance相同的确切对象.我可以通过在派生类中声明实例来解决这个问题,但是然后每个派生类都需要这样做,而且看起来它应该是不必要的.那么有什么方法可以将所有这些放在基类中吗?可以应用设计模式吗? 解决方法
有一种非常狡猾的方式:
class Base { // Put common stuff in here... } class Base<T> : Base where T : Base<T>,new() { private static T m_instance = new T(); public static T Instance { get { return m_instance; } } } class DerivedA : Base<DerivedA> {} class DerivedB : Base<DerivedB> {} class DerivedC : Base<DerivedC> {} 这是有效的,因为每个构造类型有一个静态变量 – 例如列表与LT;串GT;是与List< int>不同的类型所以会有单独的静态变量. 我也把它作为派生类的一个实例 – 我不知道这是不是你想要的,但我想我至少可以让它为你服务:) 但总的来说,这是一件令人讨厌的事情.静态变量并不是真正为这种用途而设计的 – 我只是滥用了泛型的特性来获得你所要求的“某种”行为. 另请注意,Base< DerivedA> .Instance将返回与DerivedA.Instance相同的结果 – 属性/变量不“知道”您正在使用DerivedA.Instance.我不知道这对你来说是否重要. 使用额外的非泛型类,您可以编写: Base t = DerivedA.Instance; t = DerivedB.Instance; 如果您不需要,请把它拿出来:) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |