C#泛型缓存

1.什么是泛型缓存

一个典型用列

cs 复制代码
namespace JunkLearning
{
    public class GenericCachePool
    {
        static Dictionary<string, Shape> cacheDic;

        static GenericCachePool()
        {
            cacheDic = new Dictionary<string, Shape>();
        }
        //函数泛型与泛型约束
        //可以理解为<>中,入参一个类型而非一个变量
        //入参一个"类型": Class, 入参一个"变量" Class a;
        //根本目的和作用是使用"类型"做缓存索引值,而非"变量"
        public static CacheType GetCache<CacheType>() where CacheType : Shape, new()
        {
            string cacheName = typeof(CacheType).ToString();
            CacheType finalResult = null;
            if (cacheDic.ContainsKey(cacheName))
            {
                finalResult = cacheDic[cacheName] as CacheType;
            }
            else
            {
                finalResult = new CacheType();
                cacheDic.Add(cacheName, finalResult);
            }
            return finalResult;
        }
    }
}

关于代码的解释,这个CacheTpye是什么,你可以把他看成一个T方便明白逻辑。

public static T GetCache<T>() where T: Shape, new()

new()是为了后面能实例对象。而下文中的finalResult=new CacheType();是实例对象,在代码世界中没有什么东西是能凭空就出现的,要想获得首先得实例它。

2.泛型缓存的作用是什么

这个cache适用的情况更多的是一种:"单例" "动态"的缓存情况。

即:一个类型的数据全局只有唯一一个对象,但是这个对象数据,或者是容器会经常发生变化。

比如一个玩家的数据PlayerData,在游戏运行中有且只有一份,而且会不断地动态变化。

当我们想访问缓存数据时,只需要指定类型就可以拿到数据容器与其数据,相对方便。

3.倘若不用,用非泛型。

那就需要多写几遍一样的代码,只是改变其中的string值,

object就更糟糕了。

泛型让你"写一次代码,服务所有类型",同时保持类型安全,不需要强制转换。

相关推荐
kaikaile199514 小时前
数字全息图处理系统(C# 实现)
开发语言·c#
Albert Edison17 小时前
【Redis】Centos7.9 安装 Redis 5 教程
数据库·redis·缓存
Steadfast_GG17 小时前
Redis中的通用命令
redis·缓存
wearegogog12319 小时前
C# .NET 文件比较工具 WinForms
开发语言·c#·.net
糖不吃19 小时前
WPF值转换器
c#
Popeye-lxw21 小时前
由罗技 K380 键盘 FN 键模式切换引发的血案
c#
FL162386312921 小时前
C# OpenCvSharp 基于霍夫变换直线检测的文本图像倾斜校正文本图像倾斜校
开发语言·c#
颜笑晏晏21 小时前
长输入短输出场景下的 SGLang 推理性能实测前缀缓存、PD 分离配比与参数调优
缓存·推理优化·sglang·ai infra·pd分离
真实的菜1 天前
Redis 从入门到精通(十四):Redis 7.x 新特性全解 —— 系列收官之作
数据库·redis·缓存
aini_lovee1 天前
C# 快递单打印系统(万能套打系统)
开发语言·c#