如何使一个普通的单基类C# [英] How to make a generic singleton base class C#

查看:147
本文介绍了如何使一个普通的单基类C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个通用的单基类,像

I am trying to create a generic singleton base class like

public class SingletonBase<T> where T : class, new()
{
    private static object lockingObject = new object();
    private static T singleTonObject;
    protected SingletonBase()
    {

    }

    public static T Instance
    {
        get
        {
            return InstanceCreation();
        }
    }
    public static T InstanceCreation()
    {
        if(singleTonObject == null)
        {
             lock (lockingObject)
             {
                  if(singleTonObject == null)
                  {
                       singleTonObject = new T();
                  }
             }
        }
        return singleTonObject;
    }
}



但我必须做出构造函数中衍生的一种公共

But I have to make constructor as public in derived one.

public class Test : SingletonBase<Test>
{
    public void A()
    {

    }
    private Test()
        : base()
    { }
}

编译错误:

测试必须是一个非抽象类型具有公共的无参数的构造函数,才能在泛型类型或方法测试

'Test' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'Test'

我怎样才能做到这一点?

How can I achieve this?

推荐答案

问题是您的通用的限制其中T:类,新的()。在新()约束需要公众对T.参数的构造函数有没有办法解决这个;你需要在许可控制器提供这样一个构造函数。

The problem is your generic constraint where T : class, new(). The new() constraint requires a public, parameterless constructor on T. There is no way around this; you need to provide such a constructor in Permission Controller.

这篇关于如何使一个普通的单基类C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆