C# LINQ Unity 单例
C# LINQ
1. 自定义 Master,Kongfu 类

1 class Master 2 { 3 4 public int Id { get; set; } 5 public string Name { get; set; } 6 public int Age { get; set; } 7 public string MenPai { get; set; } 8 public string Kongfu { get; set; } 9 public int Level { get; set; } 10 11 public override string ToString() 12 { 13 return string.Format("Id:{0},Name:{1},Age:{2},MenPai:{3},Kongfu:{4},Level:{5}", Id, Name, Age,MenPai,Kongfu,Level); 14 } 15 }


1 class Kongfu 2 { 3 public int Id { get; set; } 4 public string Name { get; set; } 5 public int Power { get; set; } 6 7 public override string ToString() 8 { 9 return string.Format("Id:{0},Name:{1},Power:{2}", Id, Name, Power); 10 } 11 }

2. 测试代码

1 class Program 2 { 3 static void Main(string[] args) 4 { 5 var master = new List<Master>() 6 { 7 new Master() { Id = 100, Age = 100, Kongfu = "九阳神功",Level=10,MenPai="华山",Name="李二狗" }, 8 new Master() { Id = 50, Age = 10, Kongfu = "九阳神功1" ,Level=5,MenPai="华山",Name="李大狗"}, 9 new Master() { Id = 200, Age = 60, Kongfu = "九阳神功2",Level=6,MenPai="华山",Name="李狗蛋" }, 10 }; 11 12 var kongfu = new List<Kongfu>() 13 { 14 new Kongfu(){Id=1,Name="打狗棒法",Power=90}, 15 new Kongfu(){Id=2,Name="打狗棒法1",Power=30}, 16 new Kongfu(){Id=3,Name="打狗棒法2",Power=20}, 17 }; 18 19 //使用LINQ做查询(表达式写法) 20 var res1 = from m in master //from后面设置查询的集合 21 where m.Level > 8 //where跟上条件 22 23 select m;//表示m的结果 24 //select m.Name; //只输出名字 25 26 27 //多个条件 28 var res3 = from m in master 29 30 where m.Level > 8 && m.MenPai == "丐帮" 31 32 select m; 33 34 var res4 = master.Where(m => m.Level > 8 && m.MenPai == "丐帮"); 35 36 //LINQ联合查询 37 var res5 = from m in master 38 from k in kongfu 39 where m.Kongfu==k.Name 40 select new { master = m, kongfu = k }; 41 //select m; 42 foreach (var temp in res) 43 { 44 Console.WriteLine(temp); 45 } 46 47 //join on 联合查询 48 var res12 = from m in master 49 join k in kongfu on m.Kongfu equals k.Name 50 where k.Power>90 51 select new { master = m, kongfu = k }; 52 53 54 //对查询结果升序排序 55 var res7 = from m in master 56 57 where m.Level > 8 && m.MenPai == "丐帮" 58 orderby m.Age 59 60 select m; 61 62 //对查询结果倒序排序 63 var res8 = from m in master 64 65 where m.Level > 8 && m.MenPai == "丐帮" 66 orderby m.Age descending 67 68 select m; 69 70 //对查询结果升序排序 71 var res9 = from m in master 72 73 where m.Level > 8 && m.MenPai == "丐帮" 74 orderby m.Age,m.Level //按照多个字段进行排序,如果字段的属性相同,就按照第二个属性排序 75 76 select m; 77 78 var res10 = master.Where(m => m.Level > 8 && m.MenPai == "丐帮").OrderBy(m => m.Age); 79 var res11 = master.Where(m => m.Level > 8 && m.MenPai == "丐帮").OrderBy(m => m.Age).ThenBy(m=>m.Level); 80 81 82 83 //把人物按照所学功夫进行分类,看下哪个功夫修炼人数最多(分组查询) 84 var res13 = from k in kongfu 85 join m in master on k.Name equals m.Kongfu 86 into groups 87 orderby groups.Count() 88 select new { kongfu = k,count=groups.Count()}; 89 90 //按照字段分组 91 var res14 = from m in master 92 group m by m.MenPai 93 into g 94 select new { count=g.Count(),key=g.Key}; //g.Key按照哪个属性分组 95 96 //量词操作符any all判断集合中是否满足某个条件 97 bool res15=master.Any(m => m.MenPai == "丐帮"); 98 Console.WriteLine(res15);//只要有一个满足返回true 99 100 bool res16=master.All(m => m.MenPai == "丐帮");//所有都满足才返回true 101 102 103 104 Console.ReadKey(); 105 } 106 107 //过滤方法 108 static bool Test1(Master m) 109 { 110 if (m.Level > 8) return true; 111 return false; 112 } 113 }

Unity 单例
1. 继承于MonoBehaviour(不随着场景切换而销毁)
基类代码:

1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 5 /// <summary> 6 /// 单例模式基类,继承于 MonoBehaviour,不随场景切换而销毁 7 /// 在场景中新建空物体 DDOL,挂载 T 类继承 DDOLSingleton<T> 即可 8 /// </summary> 9 /// <typeparam name="T"></typeparam> 10 public abstract class DDOLSingleton<T> : MonoBehaviour where T : DDOLSingleton<T> 11 { 12 protected static T _instance = null; 13 14 public static T Instance 15 { 16 get 17 { 18 if (null == _instance) 19 { 20 GameObject go = GameObject.Find("DDOL"); 21 if (null == go) 22 { 23 go = new GameObject("DDOL"); 24 DontDestroyOnLoad(go); 25 } 26 _instance = go.GetComponent<T>(); 27 if (null == _instance) 28 { 29 _instance = go.AddComponent<T>(); 30 } 31 } 32 return _instance; 33 } 34 } 35 }

测试:
新建空实体 DDOL,挂载脚本 GameManage。
新建一个按钮,实现加载下一场景功能,测试是否随场景销毁而销毁。
Hierarchy :
GameManage 代码:

1 using System.Collections.Generic; 2 using UnityEngine; 3 4 /// <summary> 5 /// 单例 6 /// </summary> 7 public class GameManage : DDOLSingleton<GameManage> { 8 public void TestMethod() 9 { 10 Debug.Log("GameManage"); 11 } 12 }

测试代码:

1 /// <summary> 2 /// 测试单例 3 /// </summary> 4 public class Test : MonoBehaviour { 5 6 // Use this for initialization 7 void Start () { 8 GameManage.Instance.TestMethod(); 9 } 10 11 // Update is called once per frame 12 void Update () { 13 14 } 15 16 public void OnBtnClick() 17 { 18 SceneManager.LoadScene(1); 19 } 20 }

效果图:
2. 不继承于MonoBehaviour(随着场景切换而销毁)
基类代码:

1 /// <summary> 2 /// 单例模式基类,不继承于 MonoBehaviour,随场景切换而销毁 3 /// 挂载 T 类继承 DDOLSingleton<T>,重载 Init 函数即可 4 /// </summary> 5 /// <typeparam name="T"></typeparam> 6 public abstract class Singleton<T> where T : class, new() 7 { 8 protected static T _instance = null; 9 10 public static T Instance 11 { 12 get 13 { 14 if (null == _instance) 15 { 16 _instance = new T(); 17 } 18 return _instance; 19 } 20 } 21 22 protected Singleton() 23 { 24 if (null != _instance) 25 { 26 Debug.LogError("This " + typeof(T).ToString() + " Singleton Instance is not null !!!"); 27 } 28 Init(); 29 } 30 31 public virtual void Init() 32 { 33 34 } 35 }

此时 GameManage 代码修改为:

1 /// <summary> 2 /// 测试 Singleton 3 /// </summary> 4 public class GameManage : Singleton<GameManage> { 5 public override void Init() 6 { 7 base.Init(); 8 } 9 10 public void TestMethod() 11 { 12 Debug.Log("GameManage"); 13 } 14 }

C# LINQ Unity 单例的更多相关文章
- unity单例封装
# 1.前言本篇主要针对Unity单例模式,完成一个可以重复继承使用的抽象类,减少重复的工作与代码.同时,对存在的多种单例进行优劣分析.# 2.Unity单例问题分析## 2.1 单例原则单例要满足以 ...
- Unity 单例写法
借鉴自:http://www.cnblogs.com/CodeCabin/p/unity_global_manager.html 实现复杂一些的全局控制,如切换游戏关卡等操作,更常用的方式是使用单例类 ...
- C#单例和Unity单例
单例是一种设计模式 单例:不管在项目中的任何模块,当需要使用某个对象的时候,获取到的始终是同一个对象 在C#中 public class InstanceDemo{ private static In ...
- Unity 单例
1. 继承于MonoBehaviour(不随着场景切换而销毁) 基类代码: using System.Collections; using System.Collections.Generic; us ...
- Unity单例
引自:http://www.unitymanual.com/thread-16916-1-1.html
- unity脚本的运行顺序以及单例的实现
unity引擎把所有脚本先行编译后,在运行的时候一批,一批的函数进行执行. unity脚本自带函数执行顺序如下:将下面脚本挂在任意物体运行即可得到 Awake ->OnEable-> St ...
- Unity Singleton 单例类(Unity3D开发之二十)
猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 ...
- Unity 游戏框架搭建 (三) MonoBehaviour单例的模板
上一篇文章讲述了如何设计C#单例的模板.也随之抛出了问题: 如何设计接收MonoBehaviour生命周期的单例的模板? 如何设计? 先分析下需求: 1.约束脚本实例对象的个数. 2.约束 ...
- Unity 游戏框架搭建 (二) 单例的模板
上一篇文章中说到的manager of managers,其中每个manager都是单例的实现,当然也可以使用静态类实现,但是相比于静态类的实现,单例的实现更为通用,可以适用大多数情况. 如何设计 ...
随机推荐
- Java sleep方法的作用(sleep())
sleep() 方法的作用是在指定的毫秒数内让当前“正在执行的线程”休眠(暂停执行).这个“正在执行的线程”是指 this.currentThread() 返回的线程. 例 1 下面通过一个案例来理解 ...
- 【转】NIO的定义和原理是什么?
NIO和IO到底有什么区别?有什么关系? 首先说一下核心区别: NIO是以块的方式处理数据,但是IO是以最基础的字节流的形式去写入和读出的.所以在效率上的话,肯定是NIO效率比IO效率会高出很多. N ...
- java文件上传,自动判断文件类型
public enum FileType { /** * JEPG. */ JPEG("FFD8FF"), /** * PNG. */ PNG("89504E47&quo ...
- excel数据比对,查找差异
1.选中需比对的数据 2.开始->条件格式->突出显示单元格规则->重复值 3.选择唯一值,点击确定 4.结果展示 5.颜色标识的即:不同值
- Java 垃圾回收机制 (分代垃圾回收ZGC)
什么是自动垃圾回收? 自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制.所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象:而未使用中的对象(未引 ...
- SQL语句操作SQL SERVER数据库登录名、用户及权限
要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许连接 SQL Server 服务器的权利: 获得访问特定数据库中数据的权利(select, update, de ...
- day16-python之函数式编程匿名函数
1.复习 #!/usr/bin/env python # -*- coding:utf-8 -*- name = 'alex' #name=‘lhf’ def change_name(): name= ...
- SSM调用数据库存储过程
ServiceImpl中: Map<String,Object> map=new HashMap<String,Object>(); map.put("bid&quo ...
- 一份快速实用的 tcpdump 命令参考手册
对于 tcpdump 的使用,大部分管理员会分成两类.有一类管理员,他们熟知 tcpdump 和其中的所有标记:另一类管理员,他们仅了解基本的使用方法,剩下事情都要借助参考手册才能完成.出现这种情况 ...
- Fidder详解-工具简介(保存会话、decode解码、Repaly、自定义会话框、隐藏会话、会话排序)
前言 本文会对Fidder这款工具的一些重要功能,进行详细讲解,带大家进入Fidder的世界,本文会让你明白,Fidder不仅是一个抓包分析工具,也是一个请求发送工具,更加可以当作为Mock Serv ...