在Unity3D中使用泛型(上)

目录

  • 在Unity3D中使用泛型上

    • 目录
    • 为什么需要泛型机制
    • 泛型的一个例子
    • 泛型的好处
    • Unity3D中常见的泛型
    • 小结

为什么需要泛型机制

泛型机制的出现,最主要的目的就是代码复用。在泛型机制出现以前,面对不同的类型,即便使用的是同一套逻辑,仍然需要对类型进行强制转换。任何方法只要将object作为参数类型或者返回类型使用,那么就会有可能在某个时候触发强制类型转换。泛型的出现,使得逻辑复用变为了可能。

泛型的一个例子

下面,以List<T>这个常用的数据结构为例,说明泛型的特点。先上代码:

using System;
using System.Collections.Generic;
using UnityEngine;public class Example:MonoBehaviour
{private void Start(){//创建一个元素类型为string的ListList<string> animals=new List<string>();//向animals添加string类型的对象animals.Add("cats");animals.Add("dogs");//向animals添加int类型的对象,报错animals.Add(1);}
}

在定义泛型类型或泛型方法时,为类型指定任何变量都被称为类型参数,参数变量名为T,在上面的代码中,Tstring

泛型的好处

  • 类型安全
  • 更清晰的代码
  • 更优秀的性能

Unity3D中常见的泛型

首先,使用泛型机制最明显的是一些集合类。例如在System.Collections.GenericSystem.Collections.ObjectModel命名空间中提供了很多泛型集合类。

C#还提供了很多泛型接口。而插入集合中的元素则可以通过实现接口来执行例如排序、查找等操作。例如List<T> 就实现了IList<T>泛型接口,常用的泛型接口也往往定义在System.Collections.Generic中。

除此之外,System.Array类提供了很多静态泛型的方法,例如AsReadOnly、BinarySearch、ConvertAll、Exists、Find、FindAll等。
代码例子

using System;
using System.Collections.Generic;
using UnityEngine;public class Example : MonoBehaviour
{private void Start(){Byte[] bytes=new Byte[]{2,1,5,4,3};//使用Array类的静态泛型方法sort对Byte排序Array.Sort<Byte>(bytes);//使用Array类的静态泛型方法BinarySearch查找Byte数组实例bytes中元素1的位置int targetIndex=Array.BinarySearch<Byte>(bytes,1);Debug.Log(targetIndex);}
}

还有很多常用的泛型的例子,例如Dictionary<TKey,TValue>、KeyValuePair<T,T>等。具体用法可以参阅msdn文档中System.Collections.Generic 命名空间中的描述。

小结

本次我们归纳了泛型产生的原因、泛型的优点,并举例进行说明。下次将归纳泛型机制的原理、泛型继承、以及泛型委托等内容。

在Unity3D中使用泛型(上)相关推荐

  1. 技术图文:C#语言中的泛型 II

    C#语言中的泛型 II 知识结构: 6. 泛型接口 泛型类与泛型接口结合使用是很好的编程习惯,比如用IComparable<T>而非IComparable,以避免值类型上的装箱和拆箱操作. ...

  2. 技术图文:C#语言中的泛型 I

    C#语言中的泛型 I 知识结构: 1. 泛型概述 泛型广泛应用于容器(Collections)和对容器操作的方法中. 从 .NET Framework2.0 开始,微软提供了一个新的命名空间Syste ...

  3. Unity3D中暂停时的动画及粒子效果实现

    暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...

  4. Java中的泛型 --- Java 编程思想

    前言 ​ 我一直都认为泛型是程序语言设计中一个非常基础,重要的概念,Java 中的泛型到底是怎么样的,为什么会有泛型,泛型怎么发展出来的.通透理解泛型是学好基础里面中非常重要的.于是,我对<Ja ...

  5. java中什么泛型_【原创】java中的泛型是什么,有什么作用

    泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方 ...

  6. 【笔记】JAVA中的泛型和反射

    泛型 Java的泛型是如何工作的?什么是类型擦除? ----泛型是通过类型擦除来实现的,编译器在编译时擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息.例如List在运行时仅用一个Lis ...

  7. 工具设置Unity3D系列教程--使用免费工具在Unity3D中开发2D游戏 第一节

    时间紧张,先记一笔,后续优化与完善. 声明:   本博客文章翻译类别的均为个人翻译,版权全部.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http:/ ...

  8. dart系列之:dart类中的泛型

    文章目录 简介 为什么要用泛型 怎么使用泛型 类型擦除 泛型的继承 泛型方法 总结 简介 熟悉JAVA的朋友可能知道,JAVA在8中引入了泛型的概念.什么是泛型呢?泛型就是一种通用的类型格式,一般用在 ...

  9. .NET 中的泛型 101

    1.1.1 摘要 图1 C# 泛型介绍 在接触泛型之前,我们编程一般都是使用具体类型(char, int, string等)或自定义类型来定义我们变量,如果我们有一个功能很强的接口,而且我们想把它提取 ...

最新文章

  1. rust货轮什么时候出现_与 Rust 在一起的四年
  2. python列表写入字典_python如何将列表中的元素添加进字典
  3. [Unity][NodeCanvas] 点击场景中的游戏对象以观察行为树运行情况
  4. Angular 7 和 .Net Core 2.2——全球天气(第1部分)
  5. ThinkPHP5中的助手函数
  6. mysql 5.6 解压缩版安装教程
  7. LINUX下载编译libogg
  8. JavaSE基础笔记一
  9. Oracle 触发器(一)
  10. java大小端在线转换_Java 大小端转换
  11. 树莓派+超声波模块测距
  12. NOI2010 航空管制
  13. LLVM中的pass及其管理机制
  14. 服务器网卡bond配置指引
  15. 【C++学习汇总】【黑马程序员】
  16. Android关于透明度对应表
  17. 【GZH逸佳君】:送你300集基础AI教程+6套高级设计教程+20G素材,学会就能做设计
  18. 内推贴 || Marvell 2021校园招聘火热开启
  19. 【每天一个java设计模式(完)】 - 四万字实现23种设计模式(附示例源码)
  20. m文件关联matlab,matlab关联m文件

热门文章

  1. Exe文件开机启动,隐藏运行窗口运行
  2. MIUI打开相册怎么默认显示全部照片_小米手机让相册默认展示所有图片怎么设置?
  3. 【技术贴】解决相册thumbnails文件过大 小米缩略图缓存根除办法
  4. CSS Transition
  5. 10. JavaScript
  6. ant-select组件页面下滑时下拉框漂浮
  7. 计算机的简史:从数字运算到强大的现代机器
  8. latex大括号 多行公式_问题百出的MathType公式编辑器,会有替代品吗?
  9. SLife 共享生活:去中心化的线下商业交易系统
  10. 计算机c盘如何腾出空间,电脑C盘空间不足,又不知道如何清理?做完这几步,能腾出几十个G...