zoukankan      html  css  js  c++  java
  • 1语法基础_泛型

     泛型的作用:让类或者方法,从复制粘贴  变成单个的通用访问
    1、泛型类、泛型方法、泛型接口、泛型委托

      /// <summary>
        /// 泛型方法
        /// </summary>
        public class GenericTest
        {
            public static void Show<T>(T tParameter)
            {
                Console.WriteLine("This is {0},parameter={1},type={2}",
                    typeof(CommonMethod), tParameter.GetType().Name, tParameter);
            }
        }
    
        /// <summary>
        /// 泛型类型  就是一个类型 满足多个类型的需求
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class GenericClass<T>
        { 
        public T name{get;set;} }
    public class ChildClass<S, T> : GenericClass<S>, GenericInterface<T> { } public class ChildClass1 : GenericInterface<int> { } /// <summary> /// 泛型接口 就是一个接口 满足多个多个类型的需求 /// </summary> /// <typeparam name="T"></typeparam> public interface GenericInterface<T> { } /// <summary> /// 泛型委托 就是一个委托 满足多个多个类型的需求 /// </summary> /// <typeparam name="T"></typeparam> public delegate void Do<T>();

    2、定义泛型缓存,用于性能优化,存的是hash 如果数据多了也会有性能问题

      /// <summary> 
        /// 1字典缓存:静态属性常驻内存  2根据不同类型会生成不同的副本 3泛型缓存本质上是一个泛型类
        /// </summary>
        public class DictionaryCache
        {
            private static Dictionary<Type, string> _TypeTimeDictionary = null;
            static DictionaryCache()
            {
                Console.WriteLine("This is DictionaryCache 静态构造函数");
                _TypeTimeDictionary = new Dictionary<Type, string>();
            }
            public static string GetCache<T>()
            {
                Type type = typeof(T);
                if (!_TypeTimeDictionary.ContainsKey(type))
                {
                    _TypeTimeDictionary[type] = string.Format("{0}_{1}", typeof(T).FullName, DateTime.Now.ToString("yyyyMMddHHmmss.fff"));
                }
                return _TypeTimeDictionary[type];
            }
        }

     3.泛型 约束

        public static void Show<T>(T tParameter)
               where T : People //基类约束,你只能是一个People ,所以这里参数只能传入People或者People子类
            //where T : ISports // 接口约束
            //where T : class // 引用类型约束  就只能传入引用类型的参数
            //where T : struct // 值类型约束   
            //where T : new()// 无参数构造偶函数约束
            //where T : class, new() // 泛型约束可以结合使用 ,用逗号分隔就OK
            {
               
            }
  • 相关阅读:
    艾伟_转载:二十行C#代码打造Ruby Markup Builder 狼人:
    艾伟_转载:WCF基本异常处理模式[上篇] 狼人:
    UVA 11389 The Bus Driver Problem(贪心)
    java list内部构造
    【人在运维囧途_04】 逃离故障的十条运维的工作经验总结
    Windows phone8 基础篇(一) 环境搭建和项目结构说明
    jquery如何把参数列严格转换成数组
    ORA27102: out of memory 故障
    卢松松:周一的文章最难写 晚上发文最合适
    Android开发环境搭建
  • 原文地址:https://www.cnblogs.com/LZXX/p/12938792.html
Copyright © 2011-2022 走看看