在Unity3D中使用泛型(上)

在Unity3D中使用泛型(上)

目录

为什么需要泛型机制

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

泛型的一个例子

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

using System;
using System.Collections.Generic;
using UnityEngine;

public class Example:MonoBehaviour
{
   private void Start()
  {
      //创建一个元素类型为string的List
      List<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 命名空间中的描述。

小结

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值