C#:泛型类
2020-12-17 12:32
阅读:878
标签:admin 实例 rgs int blog sync 静态方法 main 场景
对于泛型类,我们一定十分熟悉了。比如:List
泛型类型的声明,在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
以上便是对泛型类型的知识总结,记录下来以便以后查看。
C#:泛型类
标签:admin 实例 rgs int blog sync 静态方法 main 场景
原文地址:https://www.cnblogs.com/bigbosscyb/p/14021255.html
评论
亲,登录后才可以留言!