泛型类的静态成员

简介

想对单例进行统一的管理,在UnityEditor进入playMode的时候,手动清空一些单例。
于是网上搜到了一个单例的写法,但是对其中的static字段产生的疑问。

令人产生疑问的代码

public class Singleton<T> 
    where T: Singleton<T>, new() 
{

    private static T _instance;

    public static T Instance 
    { 
        get 
        {
            if(_instance == null )
            {
                _instance= new T();
            }
            return _instance; 
        }
    }


}

这个代码令人奇怪的地方是,static是静态字段,泛型类传入type参数后,居然能够访问不同类的单例。比如 Singleton.Instance返回的是Class1类,Singleton.Instance返回的是Student类。

解释

C#中的泛型类(open)相当于一个蓝图,会根据填入的type参数,生成一个新的泛型类(closed),Singleton和Sington是两个不同的类,两个类中各自有一个和自己的类绑定的static字段。
这点和java是不同的。

参考

Unity监听PlayMode

stackoverflow上的讨论

posted @   dewxin  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示