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;
            }
        }
  • 相关阅读:
    GSS3 SPOJ 1716. Can you answer these queries III gss1的变形
    GSS1 spoj 1043 Can you answer these queries I 最大子段和
    Codeforces Round #197 (Div. 2) C,D两题
    sgu 185 最短路建网络流
    CF 208E
    QTREE2 spoj 913. Query on a tree II 经典的倍增思想
    BZOJ 1146: [CTSC2008]网络管理Network 树链剖分+线段树+平衡树
    ubuntu安装vim
    历史背景更新模型
    码本模型
  • 原文地址:https://www.cnblogs.com/xiaoleye/p/4928243.html
Copyright © 2011-2022 走看看