看书发现以前写的单例类好复杂,原来这么简单就可以了

OrdinaryCoder 2019-04-26 03:15:53

public class Manager
{
private static Manager instance;
static Manager()
{
instance = new Manager();
}
public static Manager GetInstance()
{
return instance;
}
}
...全文
586 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
OrdinaryCoder 2019-04-28
  • 打赏
  • 举报
回复
引用 10 楼 qq_39231899的回复:
积分到底怎么得啊新手好难啊,根本没法下载东西
下载分需要你上传程序 然后有人下载
白龙三太子 2019-04-28
  • 打赏
  • 举报
回复
积分到底怎么得啊新手好难啊,根本没法下载东西
闭包客 2019-04-28
  • 打赏
  • 举报
回复
是的,这就是简单的单例,即使在很多正式环境中都够用了。
xiaoxiangqing 2019-04-28
  • 打赏
  • 举报
回复
容易复杂都是相对的
weixin_44990501 2019-04-28
  • 打赏
  • 举报
回复
学习
OrdinaryCoder 2019-04-26
  • 打赏
  • 举报
回复
引用 8 楼 bloodish 的回复:
[quote=引用 3 楼 OrdinaryCoder 的回复:]
[quote=引用 2 楼 bloodish 的回复:]

public abstract class Singleton<T>
{
static Lazy<T> lazyT;
static Singleton() => lazyT = new Lazy<T>();
public static T Instance => lazyT.Value;
}

VS的原因吗 我用13跑不了你的代码[/quote]

C#6.0的表达式方法体的写法,VS2013不支持,不过好像有第三方的解决方案,可以自己找一下。

我这个写法也不是最恰当的,
首先T可能需要再加点泛型约束;
其次因为这个写法要求Singleton的子类有public的缺省构造函数,这点其实有违单例的设计准则。

不用泛型单例抽象基类的话,下面这个写法你可以参考使用(sealed class, private ctor, lazy init, thread safe, etc.)


public sealed class MySingleton
{
static Lazy<MySingleton> lazyT;
static MySingleton() => lazyT = new Lazy<MySingleton>();
MySingleton() { }
public static MySingleton Instance => lazyT.Value;
}

[/quote]
好的 谢谢了
bloodish 2019-04-26
  • 打赏
  • 举报
回复
引用 3 楼 OrdinaryCoder 的回复:
[quote=引用 2 楼 bloodish 的回复:]

public abstract class Singleton<T>
{
    static Lazy<T> lazyT;
    static Singleton() => lazyT = new Lazy<T>();
    public static T Instance => lazyT.Value;
}
VS的原因吗 我用13跑不了你的代码[/quote] C#6.0的表达式方法体的写法,VS2013不支持,不过好像有第三方的解决方案,可以自己找一下。 我这个写法也不是最恰当的, 首先T可能需要再加点泛型约束; 其次因为这个写法要求Singleton的子类有public的缺省构造函数,这点其实有违单例的设计准则。 不用泛型单例抽象基类的话,下面这个写法你可以参考使用(sealed class, private ctor, lazy init, thread safe, etc.)

    public sealed class MySingleton
    {
        static Lazy<MySingleton> lazyT;
        static MySingleton() => lazyT = new Lazy<MySingleton>();
        MySingleton() { }
        public static MySingleton Instance => lazyT.Value;
    }
OrdinaryCoder 2019-04-26
  • 打赏
  • 举报
回复
引用 6 楼 exception92 的回复:
[quote=引用 5 楼 exception92 的回复:]
单例的写法有好几种了。使用static 构造确实够简单,因为构造只执行一次。

但是不是线程安全的,想确保线程安全分别了解用户模式,内核模式下不同的线程安全方式。[/quote]
哦哦 好的 我看一下
  • 打赏
  • 举报
回复
引用 5 楼 exception92 的回复:
单例的写法有好几种了。使用static 构造确实够简单,因为构造只执行一次。
但是不是线程安全的,想确保线程安全分别了解用户模式,内核模式下不同的线程安全方式。
  • 打赏
  • 举报
回复
单例的写法有好几种了。使用static 构造确实够简单,因为构造只执行一次。
OrdinaryCoder 2019-04-26
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
线程呢????????????????

!!!!!!!!!!!!!!!!!

想简单可以,lazy学学先。不然还是老老实实的写

额 没太理解你说的是什么意思 可能之前没用到过 可以稍微解释一下吗
OrdinaryCoder 2019-04-26
  • 打赏
  • 举报
回复
引用 2 楼 bloodish 的回复:

public abstract class Singleton<T>
{
static Lazy<T> lazyT;
static Singleton() => lazyT = new Lazy<T>();
public static T Instance => lazyT.Value;
}

VS的原因吗 我用13跑不了你的代码
bloodish 2019-04-26
  • 打赏
  • 举报
回复

public abstract class Singleton<T>
{
    static Lazy<T> lazyT;
    static Singleton() => lazyT = new Lazy<T>();
    public static T Instance => lazyT.Value;
}
wanghui0380 2019-04-26
  • 打赏
  • 举报
回复
线程呢???????????????? !!!!!!!!!!!!!!!!! 想简单可以,lazy学学先。不然还是老老实实的写

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧