首页 > 编程语言 >C#单例(再来一次)

C#单例(再来一次)

时间:2024-01-31 15:25:00浏览次数:22  
标签:Lazy 一次 C# private static 单例 new SingletonDemo public

一、懒加载

public sealed class SingletonDemo
{
    private SingletonDemo()
    {
    }

    private static readonly Lazy<SingletonDemo> Lazy = new(() => new SingletonDemo());
    public static SingletonDemo Instance => Lazy.Value;
}

二、单例泛型继承

public abstract class SpSingleton<T> where T : class
{
    private static readonly Lazy<T> Lazy = new(() =>
    {
        var ctors = typeof(T).GetConstructors(
            BindingFlags.Instance |
            BindingFlags.NonPublic |
            BindingFlags.Public);
        if (ctors.Length != 1)
            throw new InvalidOperationException($"Type {typeof(T)} must have exactly one constructor.");
        var ctor = ctors.SingleOrDefault(c => !c.GetParameters().Any() && c.IsPrivate);
        if (ctor == null)
            throw new InvalidOperationException($"The constructor for {typeof(T)} must be private and take no parameters.");
        return (T)ctor.Invoke(null);
    }, true);

    public static T Instance => Lazy.Value;
}

/// <summary>
/// Test
/// </summary>
public class SpSingletonTest : SpSingleton<SpSingletonTest>
{
    private SpSingletonTest()
    {
        GuidString = Guid.NewGuid().ToString();
    }

    public string GuidString { get; set; }
}

标签:Lazy,一次,C#,private,static,单例,new,SingletonDemo,public
From: https://www.cnblogs.com/xuxuzhaozhao/p/17999309

相关文章

  • 基于EPCLYPS的DDS控制器(二)
    关于ZmodAWGControllerZmodAWGController介绍双击IP核,进入的第一个界面会有Ch1GainStaticConfiguration的选项修改为“0”-->"1",其余不用修改其中右边的端口是连接SYZYGYPorts接口(若不用DAC,则sInitDoneDAC和sConfigError可以不用连接)关于左边端口SysClk100......
  • HMAC-SHA256和RSA-SHA256签名有什么区别?
    HMAC-SHA256和RSA-SHA256都是常见的签名算法,它们都使用SHA-256哈希函数,但它们在签名方式和应用场景上有所不同。HMAC-SHA256:HMAC(Hash-basedMessageAuthenticationCode)是一种基于哈希函数的消息认证码。它使用一个密钥(共享密钥)和消息作为输入,生成一个固定长度的哈希值作......
  • css中的resize设置、高度没有对齐、表单在校验、边框发生重叠
    小知识点汇总css❓:css中的resize设置......
  • vite打包配置viteCompession压缩但页面无法打开
    前言后端换了服务器地址之后前端页面就无法访问,一直提示脚本加载失败 常规做法无疑是更改base地址为'/',当然这个具体地址还得看后端的Nginx配置 but,前端在开启viteCompession并且后端也配置了gzipon,gzip_staticon的情况下一直报错,在反复试错的情况下找到了......
  • P3002 [USACO10DEC] Threatening Letter G
    https://www.luogu.com.cn/problem/P3002首先考虑一个显然的dp,设\(f_i\)表示最后一刀切在\(i\)上,并将\(1\simi\)全部剪出的最小刀数。转移显然是\(f_i=\min_{0\lej<i,t_{j+1\simi}\ins}f_j+1\),其中\(t_{j+1\simi}\)表示字符串\(t\)的子串\([j+1,i]\),\(t\ins\)......
  • ORACLE_SQL解释计划
     查询语句:EXPLAINplanFORSELECT*FROMVW_NOPOST_USER;SELECT*FROMTABLE(dbms_xplan.display());查询结果:   查询分析:根据上述查询结果进行分析。 ......
  • Page.ClientScript.RegisterClientScriptBlock 有时在前台页面无法注册的可能原因
    原因一:前台页面缺少<formid="form1"runat="server"></form>标签。加上即可。原因二:如果一个页面顺序执行多个Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"key","jsfunction")且RegisterClientScriptBlock方法的第二个参数为脚本的Key都为......
  • Tomcat学习笔记
    1.Tomcat总体架构Tomcat要实现2个核心功能:处理Socket连接,负责网络字节流与Request和Response对象的转化。加载和管理Servlet,以及具体处理Request请求。Tomcat设计了两个核心组件连接器(Connector)和容器(Container)来分别做这两件事情。连接器负责对外交流,容器负责内部处理......
  • 实测可用的mac app签名+公证教程
    转载来自:https://juejin.cn/post/7296286286155300883?from=search-suggest签名 codesign-f-oruntime-s"证书名称,去钥匙串copy"-v./build/bin/求职助手.app--deep#例子codesign-f-oruntime-s"DeveloperIDApplication:siqitaoi(Z6VUTYSX)"-v./bu......
  • [AGC024E] Sequence Growing Hard 题解
    题目链接点击打开链接题目解法考虑如何添加数,使得\(\{a_1,...,a_i\}\)到\(\{a_1,...,x,a_j,...,a_i\}\)是合法的需要手玩一会才能发现合法条件很简单:\(x>a_j\)考虑对这个进行计数一个一个添元素是难维护的,现在假设有最终的序列,每个位置有\((v,dfn)\),分别为值和添加的次......