C#泛型 理解为“比较广泛的数据类型”,可表示任何一种数据类型,泛型类的参数实例化发生在程序运行时,而不是编译阶段。
C#泛型集合,与普通集合一一对应。普通集合在对数据进行操作时无法在编译前确定其具体类型,防止运行时频繁的拆箱,装箱而引入泛型集合。是一组强类型的集合。
对应关系如下:
泛型集合 | 普通集合 |
List<T> | ArrayList |
Dictionary<T> | Hashtable |
Queue<T> | Queue |
Stack<T> | Stack |
定义和应用泛型方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CsharpJobBible
{
class Person
{
string name;
int age;
public Person(string n, int a) { name = n; age = a; }
public void showDetail() { Console.WriteLine("名字是{0},年龄是{1}", name, age); }
}
class Program
{
static void Main(string[] args)
{
List<int> lt = new List<int>();
for (int i = 1; i <= 10; i++)
{ lt.Add(i); }
Console.WriteLine("List数据列表显示如下:");
foreach (int item in lt)
{
Console.WriteLine("{0}", item);
}
int a = 5, b = 6;
Exchange<int>(ref a, ref b);
Console.WriteLine("a是{0},b是{1}", a, b);
string str1 = "同一个梦想", str2 = "慧慧加油!";
Exchange<string>(ref str1, ref str2);
Console.WriteLine("str1是{0},str2是{1}", str1, str2);
Person p1 = new Person("慧慧", 25);
Person p2 = new Person("杰杰", 22);
List<Person> person = new List<Person>();
person.Add(p1);
person.Add(p2);
foreach (Person p in person) { p.showDetail(); }
Console.Read();
}
public static void Exchange<T>(ref T a, ref T b)
{
T temp;
temp = a;
a = b;
b = temp;
}
}
}
泛型接口和应用
IComparer<T>接口定义了比较两个对象而实现的方法,即Compare方法
//IComparer接口的作用作为参数传入sort()方法,并实现对象比较方式的排序
//Sort方法的参数是IComparer,也称为比较器,如果将不同的比较强传入sort方法,就可实现不同的比较方式
//实现对学生按照姓名、年龄、年级的排序。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace CsharpJobBible
{
public class Student
{
private string name;
private int age;
private string grade;
public string Name { get { return name; } set { name = value; } }
public int Age { get { return age; } set { age = value; } }
public string Grade { get { return grade; } set { grade = value; } }
public Student(string n, int a, string g)
{ this.name = n; this.age = a; this.grade = g; }
public override string ToString()
{
return this.name + this.age.ToString() + this.grade.ToString();
}
}
public class StudentComparer : IComparer<Student>
{
public enum CompareType { name, age, grade };
private CompareType type;
public StudentComparer(CompareType type)
{
this.type = type;
}
public int Compare(Student x, Student y)
{
switch (this.type)
{
case CompareType.name:
return x.Name.CompareTo(y.Name);
case CompareType.age:
return x.Age.CompareTo(y.Age);
case CompareType.grade:
return x.Grade.CompareTo(y.Grade);
default: return x.Age.CompareTo(y.Age);
}
}
}
class T_Interface
{
public static void Main()
{
List<Student> student = new List<Student>();
Student stu1 = new Student("张里 ", 13, " 6年级");
Student stu2 = new Student("王鑫 ", 12, " 2年级");
Student stu3 = new Student("苏阳 ", 15, " 3年级");
student.Add(stu1);
student.Add(stu2);
student.Add(stu3);
//student.Sort(new StudentComparer(StudentComparer.CompareType.age));
//student.Sort(new StudentComparer(StudentComparer.CompareType.name));
student.Sort(new StudentComparer(StudentComparer.CompareType.grade));
foreach (Student item in student)
{ Console.WriteLine(item.ToString()); }
Console.Read();
}
}
}