C#:泛型类

2020-12-17 12:32

阅读:802

标签:admin   实例   rgs   int   blog   sync   静态方法   main   场景   

对于泛型类,我们一定十分熟悉了。比如:List,Dictionary等等。
技术图片
泛型类型的声明,在C#:泛型中已经提及,但是并未给出一个实际工作中应用的示例;

我们会遇到一些场景:用户登录登录等信息;股票的行情数据等,他们无论在程序的任何位置访问时都应该是同一份;这时候就需要使用到单例模式了:不允许使用者创建该类型的实例,而是为该类型实例提供一个全局访问点,从而保证整个程序中的该类型对象只有一个。

如果项目中需要支持单例模式的类型有多个,那么就需要为每个类型编写单例模式的实现代码;而这些实现代码又是高度相似的。说到这里你或许就知道怎么搞定这个麻烦事儿了,提供一个泛型单例类型。

泛型单例:它是一种泛型类型;类型参数(如:T)用来代替需要支持单例模式的类型;提供一个公开的、返回值类型为T、的静态方法。
class SingleTonBase where T : class
{
    private static T _instance;
    public static readonly object SyncObject = new object();
    public static T GetInstance()
    {
        if (_instance == null)//为了防止每次都要获取锁,增加程序耗时
        {
            lock (SyncObject)//同步锁,防止实例被同时访问
            {
                if (_instance == null)
                {
                    _instance = (T) Activator.CreateInstance(typeof(T), true);
                }
            }
        }
        return _instance;
    }
    public static void SetInstance(T value)
    {
        _instance = value;
    } 
}

使用方式:

class Program
{
    static void Main(string[] args)
    {
        for (int i = 0; i .GetInstance();
        Console.WriteLine($"{student.GetHashCode()}:{student.StudentName},{student.StudentAge}");
    }
}
class Student
{
    private  Student()
    {
        StudentName = "admin";
        StudentAge = 18;
        Console.WriteLine("构造函数运行...");
    }
    public string StudentName { get; set; }
    public int StudentAge { get; set; }
}

运行结果:

构造函数运行...
12036987:admin,18
12036987:admin,18
12036987:admin,18
12036987:admin,18
12036987:admin,18
12036987:admin,18
12036987:admin,18
12036987:admin,18
12036987:admin,18
12036987:admin,18

通过运行结果可以看出:通过泛型类型SingleTonBase提供的GetInstance()方法,我们能够保证在任何时候操作的都是同一个Student类型对象。
以上便是对泛型类型的知识总结,记录下来以便以后查看。

C#:泛型类

标签:admin   实例   rgs   int   blog   sync   静态方法   main   场景   

原文地址:https://www.cnblogs.com/bigbosscyb/p/14021255.html


评论


亲,登录后才可以留言!