C#泛型学习

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;
        }
    }
}

如图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值