C#中几种单例模式
2024-09-06 14:50:29
1.静态代码块
/// <summary>
/// 静态代码块
/// 仅在第一次调用类的任何成员时自动执行
/// </summary>
public class SingletonStatic
{
private static readonly SingletonStatic _instance =null;
static SingletonStatic()
{
_instance = new SingletonStatic();
}
private SingletonStatic()
{ }
public static SingletonStatic Instance
{
get { return _instance; }
} }
2.内部类
/// <summary>
/// 内部类
/// </summary>
public class SingletonInner
{
private SingletonInner()
{ }
public static SingletonInner Instance
{
get{ return InnerClass.inner; }
}
private class InnerClass
{
internal static readonly SingletonInner inner = new SingletonInner();
}
}
3.Lazy
/// <summary>
/// Lazy单例
/// </summary>
public class SingletonLazy
{
private static readonly SingletonLazy _instance = new Lazy<SingletonLazy>().Value;
private SingletonLazy()
{ }
public SingletonLazy Instance
{
get { return _instance; }
} }
4.单例模式基类(转自https://www.cnblogs.com/zhouzl/archive/2019/04/11/10687909.html)
/// <summary>
/// https://www.cnblogs.com/zhouzl/archive/2019/04/11/10687909.html
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class Singleton<T> where T : class
{
// 这里采用实现5的方案,实际可采用上述任意一种方案
class Nested
{
// 创建模板类实例,参数2设为true表示支持私有构造函数
internal static readonly T instance = Activator.CreateInstance(typeof(T), true) as T;
}
private static T instance = null;
public static T Instance { get { return Nested.instance; } }
}
class TestSingleton : Singleton<TestSingleton>
{
// 将构造函数私有化,防止外部通过new创建
private TestSingleton() { }
}
最新文章
- JAVA格物致知基础篇:你所不知道的返回码
- [css] CSS3中的单位
- W3School-CSS 背景实例
- 我写了本破书-swift语言实战晋级
- python爬取糗百第一页的笑话
- [转]LoadRunner参数化详解
- UML类图新手入门级介绍
- paip.php eclipse output echo 乱码
- html a标签 图片边框和点击后虚线框的有关问题
- codevs 1222 信与信封问题(二分图的完美匹配)
- GET异步 请求图片步骤
- jQuery中的选择器(上)
- java多线程知识点概述
- Canvas Snippets
- [LeetCode] 系统刷题2_排列组合
- 矩阵的SVD分解
- Flutter常用组件(Widget)解析-Text
- mysql 5.7.16 忘记root 密码 如何修改root密码
- MQTT--入门【转】
- webapi 后台跳转 后台输出html和script