Using .NET 4's Lazy<T> type
 
Explanation of the following code:

  1. If you're using .NET 4 (or higher) then you can use the System.Lazy<T> type to make the laziness really simple.
  2. All
    you need to do is pass a delegate to the constructor that calls the
    Singleton constructor, which is done most easily with a lambda
    expression.
  3. It also allows you to check whether or not the instance has been created with the IsValueCreated property.

public sealed class Singleton

{

private Singleton()

{

}

private static readonly Lazy<Singleton> lazy = new Lazy<Singleton>(() => new Singleton());

public static Singleton Instance

{

get

{

return lazy.Value;

}

}

}

Example:
 
The final example is here:

namespace Singleton

{

class Program

{

static void Main(string[] args)

{

Calculate.Instance.ValueOne = 10.5;

Calculate.Instance.ValueTwo = 5.5;

Console.WriteLine("Addition : " + Calculate.Instance.Addition());

Console.WriteLine("Subtraction : " + Calculate.Instance.Subtraction());

Console.WriteLine("Multiplication : " + Calculate.Instance.Multiplication());

Console.WriteLine("Division : " + Calculate.Instance.Division());

Console.WriteLine("\n----------------------\n");

Calculate.Instance.ValueTwo = 10.5;

Console.WriteLine("Addition : " + Calculate.Instance.Addition());

Console.WriteLine("Subtraction : " + Calculate.Instance.Subtraction());

Console.WriteLine("Multiplication : " + Calculate.Instance.Multiplication());

Console.WriteLine("Division : " + Calculate.Instance.Division());

Console.ReadLine();

}

}

public sealed class Calculate

{

private Calculate()

{

}

private static Calculate instance = null;

public static Calculate Instance

{

get

{

if (instance == null)

{

instance = new Calculate();

}

return instance;

}

}

public double ValueOne { get; set; }

public double ValueTwo { get; set; }

public double Addition()

{

return ValueOne + ValueTwo;

}

public double Subtraction()

{

return ValueOne - ValueTwo;

}

public double Multiplication()

{

return ValueOne * ValueTwo;

}

public double Division()

{

return ValueOne / ValueTwo;

}

}

}

Using .NET 4's Lazy<T> 实现单实例的更多相关文章

  1. 8.2 GOF设计模式一: 单实例模式 SingleTon

    GOF设计模式一: 单实例模式 SingleTon  整个美国,只有一个“现任美国总统”  比如,在学校,“老师”,有数百个:“校长”,只有一个  系统运行时,如何保证某个类只允许实例化一个对象 ...

  2. Linux平台oracle 11g单实例 + ASM存储 安装部署 快速参考

    操作环境:Citrix虚拟化环境中申请一个Linux6.4主机(模板)目标:创建单机11g + ASM存储 数据库 1. 主机准备 2. 创建ORACLE 用户和组成员 3. 创建以下目录并赋予对应权 ...

  3. Oracle 11.2.0.4单实例打PSU,OJVM PSU补丁快速参考

    写在前面: 1.Oracel打每个补丁的操作有时存在差异,所以不管多熟悉,都应该在打任何补丁之前阅读新补丁中附带的readme. 2.Oracle每季度都会更新一个最新的PSU,本文最新指的是当前最新 ...

  4. oracle 11.2.0.4单实例文件系统安装与补丁

    [TOC] 一,预安装处理 1.版本准备 操作系统:RHEL 6.5 数据库版本:Oracle 11.2.0.4 相关包:p13390677_112040_Linux-x86-64_1of7.zip  ...

  5. PHP生成验证码及单实例应用

    /* note: * this 指向当前对象本身 * self 指向当前类 * parent 指向父类 */ /* 验证码工具类 * @author pandancode * @date 20150- ...

  6. 关于struts和Spring 结合到一起之后存在ACtion创建单实例还是多

    struts 2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象.原因是:struts 2的Action中包含数据,例如你在页面填写的数据就会包含在Action的成员变量里面 ...

  7. LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

    LB(Load balance)负载均衡集群 LVS-[NAT+DR]单实例实验 LVS+keeplived实验 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一 ...

  8. Oracle 11.2.4.0 ACTIVE DATAGUARD 单实例安装(COPY创建备库)

    Oracle 11.2.4.0 ADG 单实例安装(COPY创建备库) 规划: 主: OS: Linux Centos 6.5 X64 hostname:ORA11G-DG1 ipaddress:19 ...

  9. C# 实现单实例程序

    在我们经常使用的软件中,当我们已经打开后,再次打开时,有的软件不会出现两个.例如有道词典,会将上次的界面显示出来,或者提示我们“该程序已经运行...”.我通过一个简单的C# WPF例子来说明. 首先我 ...

随机推荐

  1. Python+Django+SAE系列教程17-----authauth (认证与授权)系统1

    通过session,我们能够在多次浏览器请求中保持数据,接下来的部分就是用session来处理用户登录了. 当然,不能仅凭用户的一面之词,我们就相信,所以我们须要认证. 当然了,Django 也提供了 ...

  2. CentOS 配置httpd使局域网能够正常訪问

    [转载请注明出处: 钱国正的专栏http://blog.csdn.net/qianguozheng/article/details/37611859] 问题: 在CentOS上安装apache,配置好 ...

  3. git 设置

    系统乱码 项目中的编码统一设置为UTF-8编码. 设置系统的语言设置为 zh_UTF-8,把 export LANG=zh_CN.UTF-8 保存到~/.profile文件里. $ env|grep ...

  4. RHCA学习笔记:RH442-Unit8进程与调度

      UNIT 8  Processes and the Scheduler 进程与调度 学习目标 A. CPU cache 与Service time之间的关系 B. 分析应用程序使用CPU cach ...

  5. 神奇的 BlocksKit(1):源码分析(下)

    私有类 _BKObserver _BKObserver 是用来观测属性的对象,它在接口中定义了 4 个属性: @property (nonatomic,readonly,unsafe_unretain ...

  6. Web Services之SOAP学习

    Web Services之SOAP [toc] 什么是SOAP SOAP(Simple Object Access Protocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一 ...

  7. 关于安卓应用(APK文件)的二次打包

    http://blog.csdn.net/baiyuliang2013/article/details/40426681 很多开发者,不管是个人或是公司都不太注重自己开发的应用的安全性,即是 否会被不 ...

  8. C#面向对象的一些东西

    最近在复习C#面向对象,也就是说常说的3大特性:封装.继承和多态.首先说一下封装,其实封装最大的目的也是为了实现代码的解耦和重用.代码也是安全的(对外它隐藏了具体的实现,就好比我们拿个遥控器就能操作电 ...

  9. iOS 指纹解锁

    目前常用的App支持指纹解锁的还不是很多,如果在你的项目中用一下是不是显得高大上呢? 废话不说多,干货- 1.在工程中添加LocalAuthentication.framework 2.在需要验证的c ...

  10. 反射 介绍System.Type类

    本节先介绍system.Type类,通过这个类可以访问关于任何数据类型的信息. 1. system.Type类以前把Type看作一个类,但它实际上是一个抽象的基类.只要实例化了一个Type对象,实际上 ...