C#泛型(Generic)

 泛型:编写一个可以与任何数据类型一起工作的类或方法。延迟确定数据类型,直到实际在程序中使用它的时候。

泛型类:


    public class MyGenericArray<T>
    {
        private T[] array;
        public MyGenericArray(int size)
        {
            array = new T[size+1];
        }
        public T getItem(int index)
        {
            return array[index];
        }
        public void setItem(int index,T value)
        {
            array[index] = value;
        }
    }
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            MyGenericArray<int> intArray = new MyGenericArray<int>(5);
            MyGenericArray<string> stringArray = new MyGenericArray<string>(5);
        }
    }

泛型的特性:

  • 最大限度重用代码、保护类型的安全以及提高性能。
  • 创建泛型集合类。
  • 创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
  • 可以对泛型类进行约束以访问特定数据类型的方法。
  • 泛型数据类型中使用的信息可以在运行时通过反射获取。

泛型方法:通过类型参数声明泛型方法

    public class GenericMethod
    {
        public static void Swap<T>(ref T lhs, ref T rhs)
        {
            T temp;
            temp = lhs;
            lhs = rhs;
            rhs = temp;
        }
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            int a, b;
            a = 10;
            b = 10;
            GenericMethod.Swap<int>(ref a,ref b);
        }
    }

泛型委托:

    delegate T NumberChanger<T>(T n);

    static int num = 10;
    public static int AddNum(int p)
    {
        num += p;
        return num;
    }
    public static int MultNum(int q)
    {
        num *= q;
        return num;
    }
    public static int getNum()
    {
        return num;
    }
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.A))
        {
            NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);
            NumberChanger<int> nc2 = new NumberChanger<int>(MultNum);
        }
    }

泛型约束:

using System;
using System.Web.Caching;

namespace Demo.CacheManager
{
   public class CacheHelper<T> where T:new()
   {
      
   }
}
  • T:结构(类型参数必须是值类型。可以指定除 Nullable 以外的任何值类型)
  • T:类 (类型参数必须是引用类型,包括任何类、接口、委托或数组类型)
  • T:new() (类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时new() 约束必须最后指定)
  • T:<基类名> 类型参数必须是指定的基类或派生自指定的基类
  • T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。
  • T:U
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值