.NET中的泛型
泛型是 .NET 2.0 中引入的一个新特性,从 .NET 2.0 发布到现在已经过去好多年的时间了,到现在很多公司在面试时都喜欢问诸如用过泛型吗、什么是泛型、怎么写泛型之类的问题。似乎泛型是什么高深莫测的绝学了,犹如辟邪剑法一样,一般人难以运用。其实虽然每个 .NET 程序员的具体工作内容不一样,但是对于 .NET 里的一些基本的东西的运用相差不会很大,我想对于学过C# 的刚毕业的学生也不至于没有用过泛型。下面我就简单说一下泛型。 内容来自墨者资讯
泛型将类型参数的概念引入了 .NET 中,类型参数使类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。使用泛型可以最大限度地重用代码、保护类型的安全以及提高性能。 cnmoker.org
泛型类型参数 墨者资讯,最新资讯
在泛型类或方法的定义中,类型参数是客户端代码在实例化泛型类型的变量时指定的特定类型的占位符。通常我们使用 T 作为类型参数占位符,但这并不是必须的,我们可以使用一些更有意义的描述性的名称作为类型占位符,如 TInput、TOutput 等。
墨者资讯,最新资讯
public class List<TInput, TOutput>
本文转载自www.cnmoker.org 墨者资讯网
类型参数的约束
在定义泛型类型时可以对客户端代码在实例化类时用于类型参数的类型加以限制。如果客户端使用违反约束的类型来实例化类型,则会产生编译时错误。约束使用 where 关键字指定。 本文转载自墨者资讯网 墨者资讯网
结束 说明
本文来自墨者资讯
where T: struct 类型参数必须是值类型 cnmoker.org
where T: class 类型参数必须是引用类型
墨者资讯www.cnmoker.org
where T: new() 类型参数必须有一个 public 且无参数的构造函数
where T: <base classname> 类型参数必须继承至指定的基类(base class)
where T: <interface name> 类型参数必须是指定的接口或实现了指定接口的类型 cnmoker.org
where T: U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数
cnmoker.org
public class Student
{
public Student(string name, int age)
{
Name = name;
Age = age;
}
public string Name { get; set; }
public int Age { get; set; }
}
public class Teacher<T> where T : new()
{
public string Name { get; set; }
public int Age { get; set; }
public string Course { get; set; }
} 墨者资讯,最新资讯
上面的代码中我们定义了一个 Student 类和一个 Teacher 类,其中 Student 类只有一个带两个参数的构造函数。Teacher 类是一个泛型类,它的类型参数必须有一个无参的构造函数,如果使用 Student 类去实例化 Teacher 类编辑器会给出错误提示。 本文转载自www.cnmoker.org 墨者资讯网
本文转载自www.cnmoker.org 墨者资讯网
使用约束可以使用我们对泛型成员执行操作时变得更加安全。 cnmoker.org












