• C# 泛型函数


    在这里插入图片描述

    1.非约束

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyGeneirc
    {
        public class GeneircMethod
        {
            /// 
            /// 泛型方法解决,一个方法,满足不同参数类型,做相同的事情
            /// 
            /// 类型名称
            /// 参数对象
            public static void Show<T>(T tParam)
            {
                Console.WriteLine("当前类:{0},参数类型名称:{1}, 值:{2}",
                    typeof(GeneircMethod), tParam.GetType().Name, tParam.ToString());
            }
        }
    }
    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyGeneirc
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    // 变量定义
                    int iValue = 123;
                    string strValue = "456";
                    DateTime dtValue = DateTime.Now;
                    object oValue = "Mr Sorry";
    
                    // 泛型方法调用 
                    Console.WriteLine("****************Geneirc***********************");
                    // 泛型方法解决,一个方法,满足不同参数类型,做相同的事情
                    GeneircMethod.Show<int>(iValue);
                    GeneircMethod.Show<string>(strValue);
                    GeneircMethod.Show<DateTime>(dtValue);
                    GeneircMethod.Show<object>(oValue);
    
                    // 泛型类
                    GenericClass<int> genericInt = new GenericClass<int> { _t = 19 };
    
                    // 约束
                    Console.WriteLine("****************约束非约束***********************");
    
                    People people = new People() { Id = 123, Name = "张三" };
                    Chinese chinese = new Chinese() { Id = 234, Name = "李四" };
                    Hubei hubei = new Hubei() { Id = 456, Name = "王五" };
                    Japanese japanese = new Japanese() { Id = 678, Name = "田中" };
    
                    // 无意义显示
                    GeneircMethod.Show<People>(people);
                    GeneircMethod.Show<Chinese>(chinese);
                    GeneircMethod.Show<Hubei>(hubei);
                    GeneircMethod.Show<Japanese>(japanese); 
    
                }
                catch(Exception ex) 
                {
                    Console.WriteLine(ex.ToString());
                }
    
                Console.ReadLine();
            }
        }
    }
    
    

    在这里插入图片描述

    2.泛型约束

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyGeneirc
    {
    
        public class Constraint
        {
    
            /// 
            /// 泛型约束
            /// 1.权利 可以使用基类的一切属性方法
            /// 2.义务 强制保证T 一定是People 或 其子类(不能是密封类,)
            /// 
            public static void Show<T>(T tParam)
                where T : People, ISports // 基类约束
            {
                Console.WriteLine("当前类:{0},ID:{1}, Name:{2}",
                    typeof(Constraint), tParam.Id, tParam.Name);
    
                tParam.Hi();
    
            }
    
            // 泛型约束相比父类 可以叠加,更加灵活
            public static void ShowBase(People tParam)
            {
                Console.WriteLine("当前类:{0},ID:{1}, Name:{2}",
                    typeof(Constraint), tParam.Id, tParam.Name);
    
                tParam.Hi();
            }
    
            public static T Get<T>(T t)
                where T : ISports // 接口约束
            {
                t.Pinpang();
                return t;
            }
    
            public static T GetClass<T>(T t)
                    where T : class // 引用类型约束
            {
                T tNew = null; // T 必须是引用类型
                return t;
            }
    
            public static T GetStruct<T>(T t)
                    where T : struct // 值类型约束
            {
                // 默认类型 根据T的不同 赋予默认值
                T tNew = default(T); // T 必须是值类型
                return t;
            }
    
            public static T GetNew<T>(T t)
                where T : new() // 无参数构造函数约束
            {
                // new 对象
                T tNew = new T(); // T 类必须有构造函数(无参数)
                return t;
            }
        }
    }
    
    
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MyGeneirc
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                try
                {
    
                    People people = new People() { Id = 123, Name = "张三" };
                    Chinese chinese = new Chinese() { Id = 234, Name = "李四" };
                    Hubei hubei = new Hubei() { Id = 456, Name = "王五" };
                    Japanese japanese = new Japanese() { Id = 678, Name = "田中" };
    
    
    
                    Console.WriteLine("****************约束基类***********************");
                    //Constraint.Show(people);
                    Constraint.Show<Chinese>(chinese);
                    Constraint.Show<Hubei>(hubei);
                    //Constraint.Show(japanese); // 编译报错
    
                    Console.WriteLine("****************约束接口***********************");
                    Constraint.Get<Chinese>(chinese);
    
                }
                catch(Exception ex) 
                {
                    Console.WriteLine(ex.ToString());
                }
    
                Console.ReadLine();
            }
        }
    }
    
    

    在这里插入图片描述

  • 相关阅读:
    嵌入式开发:硬件在环测试
    动态库加载【Linux】
    【李宏毅机器学习】Explainable AI
    孙卫琴的《精通JPA与Hibernate》的读书笔记:通过JPA处理Blob和Clob类型的数据
    常用黄芪泡水喝,身体能得到什么?学会搭配,养生效果或会翻倍
    SpringBoot 整合 Elasticsearch (超详细)
    Android学习笔记 83. 卡片和颜色
    Android核心组件:Activity
    干货:每周一练C++ 小项目
    发布app项目和更新app版本
  • 原文地址:https://blog.csdn.net/weixin_45875105/article/details/139279837