zoukankan      html  css  js  c++  java
  • 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
    

      

  • 相关阅读:
    2019武汉大学数学专业考研真题(回忆版)
    矩阵求导与投影梯度相关问题
    Coxeter积分计算
    常微分方程
    一些个人偏好的书籍
    Angular的表单组件
    Angular的第一个组件
    Angular的第一个helloworld
    Angular入门
    handlebars——另外一个模板引擎
  • 原文地址:https://www.cnblogs.com/gwyy/p/8031799.html
Copyright © 2011-2022 走看看