• .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());   
            }
    通过我们泛型的使用,为我们节约了几备的工作量。

  • 相关阅读:
    JAVA字符串格式化-String.format()的使用
    分布式文件系统MFS(moosefs)实现存储共享(第二版)
    iOS 动画学习
    复制对象(一)copy和mutableCopy方法
    iOS-获取当前网页的 url 和 title 和 html
    排序算法 c实现
    常用正则表达式
    iOS-获取的NSDate date时间与实际相差8个小时解决方案
    网络爬虫基本原理(二)
    网络爬虫基本原理(一)
  • 原文地址:https://www.cnblogs.com/wymlvjing/p/2646434.html
Copyright © 2020-2023  润新知