标签:运行 泛型 类型 mic 时长 rod 命名规范 get 高级
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();
}
标签:运行 泛型 类型 mic 时长 rod 命名规范 get 高级
原文地址:https://www.cnblogs.com/m962263807/p/13280665.html