惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
D
Docker
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
F
Full Disclosure
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
L
LangChain Blog
H
Help Net Security
B
Blog
T
Tailwind CSS Blog
V
V2EX
博客园_首页
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
Recent Announcements
Recent Announcements
aimingoo的专栏
aimingoo的专栏
美团技术团队
A
About on SuperTechFans
C
Cybersecurity and Infrastructure Security Agency CISA
K
Kaspersky official blog
I
InfoQ
Project Zero
Project Zero
I
Intezer
Google DeepMind News
Google DeepMind News
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Threat Research - Cisco Blogs
Last Week in AI
Last Week in AI
C
Cyber Attacks, Cyber Crime and Cyber Security
G
GRAHAM CLULEY
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AWS News Blog
AWS News Blog
Spread Privacy
Spread Privacy
S
Securelist
Recorded Future
Recorded Future
D
Darknet – Hacking Tools, Hacker News & Cyber Security
博客园 - 叶小钗
S
Security Affairs
Blog — PlanetScale
Blog — PlanetScale
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
The Hacker News
The Hacker News

博客园 - rex

C#编译javascript - JQuery模板 将C#编译为javascript TouchPad App - Advanced Calculator TouchPad App - Unit converter webOS App - Simple Unit Convert 在javascript库中整合Sizzle(Sizzle引擎的使用) source code upload to google code RexStudio2.0RC c# 2.0 Factory的实现 Emit生成Property .NET 分布式事务处理 Castle IoC castle 五子棋:) *.ashx:HttpHandler的另一种用法 自己制作的ORMap框架终于完成的差不多了。 VStudio 2003 remote debug Application Container AOP static crosscutting 的一个实现
C#2.0 Singleton 的实现
rex · 2006-01-12 · via 博客园 - rex

利用c#2.0的范型加上一点反射,构造了一个自认为不错的Singleton实现.

public class Singleton<T>
    
{
        
protected Singleton()
        
{
             
//Assert class T don't have public constructor
             
//Assert class T have a private/protected parameterless constructor
        }


        
protected static T _instance;
        
public static T Instance()
        
{
            
//Assert class T don't have public constructor
            
//Assert class T have a private/protected parameterless constructor
            
//Assert class T is not abstract and is not an interface

            
if (_instance == null)
            
{
                    _instance 
= (T)Activator.CreateInstance(typeof(T),true);//use reflection to create instance of T
            }

            
return _instance;
        }


        
public void Destroy()
        
{
            _instance 
= default(T);
        }

    }

使用也很方便;例如

class Foo
{
    
private Foo()//must declare,or assert will fail in the singleton class
    {
    }

    
    
public void Bar()
    
{
        
    }

}




void Test()
{
    Singleton
<Foo>.Instance().Bar();
}

甚至可以这样定义一个类:

public class Foo : Singleton<Foo>
{
    
protected Foo()//must declare
    {
    }

    
    
public void Bar()
    
{
        
    }

}





void Test()
{
    Foo.Instance().Bar();
}