zoukankan      html  css  js  c++  java
  • 泛型-----------C#

     class Program
        {
            static void Main(string[] args)
            {
                nihao<Int32> i = new nihao<Int32>();
                //使用这个类中的add方法
                i.Add(1);
    
                i.WriteStill();
                Console.Write(i.Add_3<int>(3));
                Console.ReadKey();
            }
        }
    
        //模仿List的泛型类型
        //where T : struct | T必须是一个结构类型
        //where T : class T必须是一个类(class)类型
        //where T : new() | T必须要有一个无参构造函数
        //where T : NameOfBaseClass | T必须继承名为NameOfBaseClass的类
        //where T : NameOfInterface | T必须实现名为NameOfInterface的接口
        //where T : Stream | T必须实现名为NameOfInterface的接口
        public class nihao<T> where T : struct
        {  //T只是使类型看起来直观,其实并没有什么实际作用
    
    
            //这是一个存储变量的字段
            private List<T> Current;
            public nihao()
            {
                Current = new List<T>();
            }
    
            public void WriteStill()
            {
                foreach (T nini in Current)
                {
                    Console.Write(nini);
                }
            }
    
            public bool Add(T MYT)
            {
                Current.Add(MYT);
                return true;
            }
    
            //泛型方法,TS和T的效果一样。。。只是为了做参数的类型限定,,这样可以增加方法传参的灵活性
            public string Add_3<TS>(TS I) where TS : struct
            { 
                TS t = I;
                return t.ToString();
            }
    
        }

     2.以上的泛型T是不能用new实例化的类型,,,要实例化的话,首先得是继承与class,还有继承new(),例如

     public sealed class DoubleSearch<T> where T : class, new()
        {
            //这个对象引用一个单实例对象
            private static T s_value=null ;
    
            //私有化,防止外部实例化
            private DoubleSearch()
            {
    
            }
    
            public static T GetSingleton()
            {
                //如果对象已经创建,就直接返回(这样速度很快)
                if (s_value != null) return s_value;
    
                //创建一个实例对象,并把它固定下来
                T temp = new T();
                Interlocked.CompareExchange(ref s_value,temp,null);
                //这个技术的缺点是,,在多个线程同时访问这个方法时,会实例化多个对象。。。
                //但是,这种情况几乎不会发生。。。。
                //就算发生, 多创建的实例,之后也会被释放掉
                return s_value;
            }
        }
  • 相关阅读:
    node体验
    JS练习--prototype的一道题目
    JS的OOP--继承之prototype
    JS的OOP--new一个function背后的实际操作
    JS中new运算符的运算顺序
    thymeleaf 拼接字符串与变量
    spring jpa exists
    LocalDateTime json格式化
    格式化java8 LocalDateTime
    springboot定时任务
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/4928243.html
Copyright © 2011-2022 走看看