.net 学习笔记(2)

                                                           泛型初识

    泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。

    .net 2.0后开始支持泛型。泛型不仅是C#的一部分,而且与程序集中的IL代码紧密集成。有了泛型,就可以创建独立于被包含类型的类和方法。我们不必须给不用的类型编写相同的方法或类。另一个减少代码的选项是object类,但是object不是类型安全的。泛型类使用泛型类型,并可以根据需要用特定的使用特定类型替换泛型类型。这就保证了类型安全性;如果某个类型不支持泛型类,编译就会出错误。
    泛型并不是全新的结构,其他的语言有类似的概念。c++中的模板和泛型很相似。
    c++模板是用特定的类型实例化模板,需要模板的原代码。
    相反,泛型不仅仅是c#语言的一种结构,而且是CLR定义的。所以即使泛型类在c#中定义的,也可以在vb中调用特定的类型实例化该泛型。
    
下面我们举个例子说明泛型的使用   
有时,有两个或多个类,其功能是相同的,仅仅是数据类型不同,如下面语句声明了一个类:
其作用是对两个整数作比较,可以通过调用成员函数max求最大值。
两个整型数据进行比较
    class Compare_int
    {
        private int x, y;
        public Compare_int(int a, int b)
        {
            x = a;
            y = b;
        }
        public int max()
        {
            return (x > y) ? x : y;
        }
    }
如果想对两个浮点数(float型)作比较,需要另外声明一个类:
class Compare_float
    {
        private float x, y;
        public Compare_float(float a, float b)
        {
            x = a;
            y = b;
        }
        public float max()
        {
            return (x > y) ? x : y;
        }
    }

程序调用:
 private void button1_Click(object sender, EventArgs e)
        {
            Compare_int cm=new Compare_int(3,1);
            MessageBox.Show( cm.max().ToString());
            Compare_float cmc = new Compare_float(3.3, 5.7);
            MessageBox.Show(cmc.max().ToString());     
        }
显然这基本上是重复性的工作,应该有办法减少重复的工作。
我们下面用泛型来重写这个类
  class Compare<T>
    {
        private T x, y;
        public Compare(T a, T b)
        {
            x = a;
            y = b;
        }
        public T max()
        {
            return (Convert.ToInt32(x) >Convert.ToInt32(y)) ? x : y;
        }
    }
程序调用:
 private void button1_Click(object sender, EventArgs e)
        {
            //整型数据比较大小
            Compare<int> cm=new Compare<int>(3,1);
            MessageBox.Show( cm.max().ToString());
            //浮点型数据比较大小
            Compare<float> cmc1 = new Compare<float>(3.3F, 0.7F);
            MessageBox.Show(cmc1.max().ToString());
            //字符数据比较大小
            Compare<char> cmc2 = new Compare<char>('a', 'c');
            MessageBox.Show(cmc2.max().ToString());   
        }
通过我们泛型的使用,为我们节约了几备的工作量。

原文地址:https://www.cnblogs.com/wymlvjing/p/2646434.html