泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。
您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。
使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:
namespace GenericStudy
{
/// <summary>
/// 泛型类
/// </summary>
public class GenericClass<T>
{
public T[] Param { get; set; }
public GenericClass(int size)
{
Param = new T[size];
}
public T GetParam(int index)
{
return Param[index];
}
public void SetParam(int index, T val)
{
Param[index] = val;
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericStudy
{
/// <summary>
/// 泛型方法
/// </summary>
public class GenericMethod
{
public static void ConsoleType<T>()
{
Type t = typeof(T);
Console.WriteLine(t.FullName);
}
}
}
using System;
namespace GenericStudy
{
/// <summary>
/// 泛型学习
/// </summary>
class Program
{
static void Main(string[] args)
{
//泛型类
GenericClass<int> genericClass = new GenericClass<int>(3);
for (int i = 0; i < 3; i++)
{
genericClass.SetParam(i, i + 10);
}
for (int i = 0; i < 3; i++)
{
Console.WriteLine(genericClass.GetParam(i));
}
GenericClass<string> genericClass1 = new GenericClass<string>(5);
for (int i = 0; i < 5; i++)
{
genericClass1.SetParam(i, i.ToString());
}
for (int i = 0; i < 5; i++)
{
Console.WriteLine(genericClass1.GetParam(i));
}
//泛型方法
GenericMethod.ConsoleType<string>();
GenericMethod.ConsoleType<int>();
}
}
}
where T : struct | T必须是一个结构类型
where T : class | T必须是一个Class类型
where T : new() | T必须要有一个无参构造函数
where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
where T : NameOfInterface | T必须实现名为NameOfInterface的接口
例如:指定T必须是Class类型
using System;
using System.Collections.Generic;
using System.Text;
namespace GenericStudy
{
/// <summary>
/// 泛型方法
/// </summary>
public class GenericMethod
{
public static void ConsoleType<T>() where T : class
{
Type t = typeof(T);
Console.WriteLine(t.FullName);
}
}
}
原文:https://www.cnblogs.com/gygtech/p/14772738.html