c# 泛型

介绍:
 
   我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。
 
泛型通过参数化类型来实现在同一份代码上操作多种数据类型。例如使用泛型的类型参数T,定义一个类Stack<T>,可以用Stack<int>、Stack<string>或Stack<Person>实例化它,从而使类Stack可以处理int、string、Person类型数据。这样可以避免运行时类型转换或封箱操作的代价和风险,类似C++的模板。泛型提醒的是将具体的东西模糊化,这与后面的反射正好相反。
 
定义:
泛型用用一个通过的数据类型T来代替object,在类实例化时指定T的类型,运行时(Runtime)自动编译为本地代码(我的理解是自动编译为对应类型的代码),运行效率和代码质量都有很大提高,并且保证数据类型安全。
 
 
 
 
泛型方法:
泛型方法是使用类型参数声明的方法
 int a = find<int>(new int[]{ 3,4,5,6},6);
 public static int find<T>(T[] value, T val) {
            for (int i = 0; i < value.Length; i++) {
                if (value[i].Equals(val)) return i;
            }
            return -1;
        }

  

 
 
 
 
例子:
    gwyy<int> a = new gwyy<int>(2);
            a.Push(33);
            a.Push(44);
            a.show();

            gwyy<string> b = new gwyy<string>(2);
            b.Push("aaa");
            b.Push("bbb");
            b.show();

class gwyy <T> {
        private T[] s ;
        int pos = 0;
        public gwyy(int size) {
            s = new T[size];
        }
        public void Push(T val) {
            s[pos] = val;
            pos++;
        }
        public T pop() {
            pos--;
            return s[pos];
        }
        public void show() {
            foreach (T i in s) {
                Console.WriteLine(i);
            }
        }
    } //gwyy end

  

posted @ 2017-12-13 10:58  梁天  阅读(321)  评论(0编辑  收藏  举报