Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GenericDemo
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine($"10+20={add(10, 20)}");
Console.WriteLine($"10.5+20.9={add(10.5, 20.9)}");
Console.WriteLine($"10+20.9={add(10, 20.9)}");
Console.WriteLine(add("hello", " world"));
Console.WriteLine("-----------------");
Console.WriteLine(Sum(100));
Console.ReadLine();
}
//泛型方法简单使用
static T add<T>(T a, T b)
{
dynamic a1 = a;
dynamic b1 = b;
return a1 + b1;
}
//泛型方法实现一个数求和
static T Sum<T>(T a) where T : struct
{
dynamic sum = default(T);
for (dynamic i = default(T); i <= a; i++)
{
sum += i;
}
return sum;
}
}
}
如图:
Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GenericsDemo
{
class Program
{
//static void Main(string[] args)
//{
// MyStack<int> stack1 = new MyStack<int>(5);
// stack1.Push(1);
// stack1.Push(2);
// stack1.Push(3);
// stack1.Push(4);
// stack1.Push(5);
// stack1.Push(6);
// Console.WriteLine(stack1.Pop());
// Console.WriteLine(stack1.Pop());
// Console.WriteLine(stack1.Pop());
// Console.WriteLine(stack1.Pop());
// Console.WriteLine(stack1.Pop());
// Console.WriteLine(stack1.Pop());
// MyStack<string> stack2 = new MyStack<string>(5);
// stack2.Push("产品1");
// stack2.Push("产品2");
// stack2.Push("产品3");
// stack2.Push("产品4");
// stack2.Push("产品5");
// stack2.Push("产品6");
// Console.WriteLine(stack2.Pop());
// Console.WriteLine(stack2.Pop());
// Console.WriteLine(stack2.Pop());
// Console.WriteLine(stack2.Pop());
// Console.WriteLine(stack2.Pop());
// Console.WriteLine(stack2.Pop());
// Console.Read();
//}
static void Main(string[] args)
{
//实例化泛型对象
MyGeneric<int, Course, Teacher> myGeneric = new MyGeneric<int, Course, Teacher>();
//给对象属性赋值
myGeneric.ProductList = new List<Course>()
{
new Course(){CourseName=".NET",Period=10},
new Course(){CourseName="SQL Server",Period=20},
new Course(){CourseName="TypeScript",Period=30}
};
myGeneric.Publisher = new Teacher()
{
Age = 28,
Name = "Lex"
};
Course course = myGeneric.Buy(1);
Console.WriteLine($"你买的课程是{course.CourseName},时长为{course.Period}分钟,发布者是{myGeneric.Publisher.Name},年龄{myGeneric.Publisher.Age}岁");
Console.Read();
}
}
/// <summary>
/// 添加约束类型的泛型类
/// </summary>
/// <typeparam name="T1"></typeparam>
/// <typeparam name="T2"></typeparam>
/// <typeparam name="T3"></typeparam>
class MyGeneric<T1, T2, T3>
where T1 : struct //
where T2 : class
where T3 : new()
{
public List<T2> ProductList { get; set; } = new List<T2>();
public T3 Publisher { get; set; } = new T3();
public T2 Buy(T1 item)
{
dynamic num = item;
return ProductList[num];
}
}
class Course
{
public string CourseName { get; set; }
public int Period { get; set; }
}
class Teacher
{
public string Name { get; set; }
public int Age { get; set; }
}
}
MyStack.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GenericsDemo
{
/// <summary>
/// 使用泛型类实现出入栈通用类
/// </summary>
public class MyStack<T>
{
T[] stack;
int size;//栈数据容量
int stackPoint;//栈位置指针
public MyStack(int size)
{
this.size = size;
stack = new T[size];
stackPoint = -1;
}
/// <summary>
/// 入栈
/// </summary>
/// <param name="item"></param>
public void Push(T item)
{
stackPoint++;
if (stackPoint >= size)
{
Console.WriteLine("栈空间已满");
return;
}
stack[stackPoint] = item;
}
/// <summary>
/// 出栈
/// </summary>
/// <returns></returns>
public T Pop()
{
stackPoint--;
if (stackPoint < 0)
{
Console.WriteLine("栈空间已空");
return default(T);
}
T data = stack[stackPoint];
return data;
}
}
}