• C#之泛型


    泛型是C# 2.0版本才有的语言特性,是具有参数类型占位符的类、结构、接口和方法。这些占位符是类、结构、接口和方法所存储或使用的一个或多个占位符。简单来说,就是变量类型的参数化。

    以下是详细demo:

        #region 泛型的约束
            
        /// <summary>
        /// 1.0基类约束
        /// </summary>
        /// <typeparam name="T">约束成了将来调用的时候只能传入Pig本身或者其子类</typeparam>
       public  class House<T> where T:Pig
        {
    
        }
    
        /// <summary>
        /// 2.0 引用类型约束
        /// </summary>
        /// <typeparam name="T">约束成了将来调用的时候只能传入引用类型参数</typeparam>
        public class House1<T> where T:class
        {
    
        }
    
        /// <summary>
        /// 3.0值类型约束
        /// </summary>
        /// <typeparam name="T">约束成了将来调用的时候只能传入值类型参数</typeparam>
        public class House2<T> where T:struct
        {
    
        }
    
        /// <summary>
        /// 4.0接口约束
        /// </summary>
        /// <typeparam name="T">约束成了将来调用的时候只能传入Ipig本身或者Ipig的实现类型参数</typeparam>
        public class House3<T>where T:IPig
        {
    
        }
    
        /// <summary>
        /// 5.0构造器约束
        /// </summary>
        /// <typeparam name="T">约束成了将来调用的时候只能传入 构造器参数</typeparam>
        public class House4<T>where T:class ,new()
        {
            T t;
            public House4()
            {
                t = new T();
            }
        }
    
        /// <summary>
        /// 多个参数约束
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <typeparam name="V"></typeparam>
        public class House6<T, V>
            where T : class
            where V : struct
        {
    
        }
     
        #endregion
    
        #region 泛型的继承
        public class DogHouse6 : House6<Dog, int>
        {
    
        }
    
        public class DogHouse61<X, Y> : House6<X, Y>
            where X : class
            where Y : struct
        {
    
        }
    
        public class DogHouse62<X, Y> : House6<Pig, decimal>
        {
            
        }
        
        #endregion
    
        #region 泛型方法
        /// <summary>
        /// 泛型方法  有下列任何一项  均构成重载:
        /// 1.泛型方法的参数个数不一致 
        /// 2.参数类型不一致
        /// 3.类型占位符个数不一致
        /// 
        /// 
        /// 泛型方法的类型占位符个数一致,但名字不一样 不会构成重载
        /// </summary>
        public class UserInfoBll
        {
            public T Get<T>(T t)
            {
                return t;
            }
    
            public string GetName<T>(T t, int num)
            {
                T tt = t;
                return "某一个参数类型为泛型,返回值为string";
            }
    
            public string GetName<T, V>(T t, int num)
            {
                T tt = t;
                return "返回值";
            }
    
            public T GetName<T>(string str)
            {
                return default(T);
            }
    
            public string GetName<T>(T t)
            {
                T tt = t;
                return "返回值";
            }
        }
    
        public class UserInfoBll1<T>
        {
            T tt;
            public T GetT(T t)
            {
                tt = t;
                return tt;
            }
        } 
        #endregion
    
        #region 泛型方法的重写
        public abstract class Father
        {
            public abstract T SayHi<T, U>(T t, U u) where U : T; // U必须继承于T
    
            public abstract T Think<T>(T t) where T : Pig;
        }
    
        /// <summary>
        /// 子类重写父类中的抽象泛型方法的时候,不需要单独再将类型占位符 重新添加约束
        /// </summary>
        public class Son : Father
        {
            public override T SayHi<T, U>(T t, U u)
            {
                return t;
            }
    
            public override T Think<T>(T t)
            {
                return default(T);
            }
        } 
        #endregion

    使用泛型进行缓存管理:

      public   class CacheMgr<T>
        {
          public static T Get(string cacheKey)
          {
              return (T)HttpRuntime.Cache[cacheKey];
          }
    
          public static void Add<TT>(string cacheKey,TT value)
          {
              HttpRuntime.Cache[cacheKey] = value;
          }
        }
  • 相关阅读:
    vue-常用指令汇总
    vue-插槽和具名插槽
    vue-传值校验
    vue-动态组件
    vue-组件
    zend studio 快捷键收集
    php调试工具firephp
    zend studio插件
    MySQL各个版本区别
    PHP 中 Date 函数与实际时间相差8小时的解决方法
  • 原文地址:https://www.cnblogs.com/miaoying/p/5433377.html
Copyright © 2020-2023  润新知