C#中泛型类 泛型方法

1,泛型好处:增加类型好处,带来编码的方便


常见的泛型:泛型类和泛型方法,泛型委托(自定义委托,常见的泛型委托(Func,Action))


泛型类的规范:public class 类名<T>{类的成员}
T:仅仅是一个占位符,只要符合c#命名规范即可,但一般使用T
T:表示一个普通的数据类型,在使用的时候用实际类型代替
T:泛型类可以在定义中包含多个任意类型参数,参数之间用多个逗号分隔,
例子:public MyGenericClass<T1,T2,T3>{...}

用泛型类做一个简单的进栈,出栈

public class MyStack<T>
{
private T[] stack;
private int stacPoint;
private int size;

public MyStack(int size)
{

this.size = size;
this.stack = new T[size];
this.stacPoint = -1;
}
public void Push(T item)
{

if (stacPoint >= size)
{
Console.WriteLine("栈空间已满");
}
else
{
stacPoint++;
this.stack[stacPoint] = item;
}
}
public T Pop()
{

T data = this.stack[stacPoint];
stacPoint--;
return data;
}
}

 

static void Main(string[] args)
{
MyStack<int> stack1 = new MyStack<int>(3);
//入栈
stack1.Push(1);
stack1.Push(2);
stack1.Push(3);
//出栈
Console.WriteLine(stack1.Pop());
Console.WriteLine(stack1.Pop());
Console.WriteLine(stack1.Pop());

Console.ReadKey();
}

 

其他类型也是一样

2,约束类型的泛型类

//使用关键字where
class MyGenericClass2<T1, T2, T3>
where T1:struct //类型必须是值类型
where T2: class//类型必须是引用类型
where T3:new()//类型必须有一个无参数构造方法,且必须放到最后
//除此之外还有多种其他类型
//基类类型,接口类型等。。。
{
public List<T2> ProductList { get; set; }
public T3 Publisher { get; set; }
public MyGenericClass2() {

ProductList = new List<T2>();
Publisher = new T3();
}
public T2 Buy(T1 num) {
//动态类型
dynamic uknow = num;
return ProductList[uknow];
}
}

//根据泛型类的要求设计参数
class Course {

public string CourseName { get; set; }
public int Period { get; set; }
}
class Teacher {

public string Name { get; set; }
public int Count { get; set; }
}

//运行结果

static void Main(string[] args)
{
//实例化泛型类型对象
MyGenericClass2<int, Course,Teacher > MyClass2 = new MyGenericClass2<int, Course, Teacher>();
//给对象实行赋值
MyClass2.Publisher = new Teacher() { Name = "周老师", Count = 20 };
MyClass2.ProductList = new List<Course>() {

new Course(){ CourseName = ".Net-CS+BS高级工程师",Period = 6},
new Course(){ CourseName = ".Net-CS高级工程师",Period = 3},
new Course(){ CourseName = ".Net-BS高级工程师",Period = 3},
};
//调用方法对象
Course Mycourse = MyClass2.Buy(0);
string info = string.Format("我购买的书本有:{0} 时长:{1}个月 老师:{2}",
Mycourse.CourseName,
Mycourse.Period,
MyClass2.Publisher.Name);
Console.WriteLine(info);
Console.ReadKey();
}

C#中泛型类 泛型方法

上一篇:Quartz.Net系列(十一):System.Timers.Timer+WindowsService实现定时任务


下一篇:使用Duilib开发Windows软件(7)——control 类