c# - 单例类继承

标签 c# .net

我已经声明了一个带有 protected 构造函数的单例类,并在其他类中派生。所以派生类实例可以是单例,也可以不是。

有没有办法让派生类保持单例?

最佳答案

这是我使用的良好线程安全单例类的列表:

namespace Helpers.DesignPatterns
{
public class Singleton<T> where T : class
{
    private static volatile T _instance;
    private static object _syncRoot = new Object();

    protected Singleton()
    {
    }

    private static T CreateInstance()
    {
        ConstructorInfo cInfo = typeof(T).GetConstructor(
            BindingFlags.Instance | BindingFlags.NonPublic,
            null,
            new Type[0],
            new ParameterModifier[0]);

        return (T)cInfo.Invoke(null);
    }

    /// <summary>
    /// Точка входа синглтона
    /// </summary>
    public static T Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_syncRoot)
                {
                    if (_instance == null)
                        _instance = CreateInstance();
                }
            }

            return _instance;
        }
    }
  }
}

创建派生类非常简单:

class CredentialsManager : Singleton<CredentialsManager>

但通常在项目中拥有超过 1 个单例类并不是一个很好的解决方案。我有 4 个:)

关于c# - 单例类继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17986054/

相关文章:

c# ProcessCmdKey重载,匹配泛型组合

c# - 如何在 C# 中处理非规范化 float ?

c# - WPF ListboxItem 和上下文菜单

c# - 澄清 ColorMatrix 转换的工作原理

c# - 用C#制作<h1> </h1>

c# - 将 StringBuilder 传递给 PInvoke 函数

c# - 什么是限制范围输出的好散列函数

c# - 如何对我的对象是否真的可序列化进行单元测试?

后台 worker 中的.net数据读取器

.net - WCF .svc 可通过 HTTP 访问但访问 WSDL 导致 "Connection Was Reset"