1. 程式人生 > >C# 簡單的泛型單例

C# 簡單的泛型單例

//SharedInstance.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SharedInstance
{
    public class SharedInstance<T>
        where T:new()
    {
        private static T m_Instance = default(T);

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

這裡使用了 Where 約束

使用Where 約束,new()約束 讓編譯器知道,提供的任何型別引數都具有預設建構函式。

也只有加了這個約束之後,才能使用 new T() ;  

使用方法

//Student.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SharedInstance
{
    public class Student:SharedInstance<Student>
    {
        public void GetAge()
        {
            Console.WriteLine("12");
        }
    }
}

//Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SharedInstance
{
    class Program
    {
        static void Main(string[] args)
        {
            Student.Instance.GetAge();
            Student.Instance.GetAge();
        }
    }
}

示例下載:
http://pan.baidu.com/s/1gdP01J9