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

推荐订阅源

有赞技术团队
有赞技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
D
DataBreaches.Net
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Y
Y Combinator Blog
博客园 - 【当耐特】
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
量子位
C
Check Point Blog
F
Fortinet All Blogs
罗磊的独立博客
Last Week in AI
Last Week in AI
GbyAI
GbyAI
L
LangChain Blog
博客园 - 司徒正美

博客园 - 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();
}