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

  • 相关阅读:
    Redis 配置为 Service 系统服务
    java.lang.IllegalStateException: The platform metadata area could not be written
    SpringCloud Gateway做熔断降级+限流
    Mac mysql修改my.cnf不起作用排查
    MailHealthIndicator javax.mail.MessagingException: Could not connect to SMTP host: smtp.qiye.aliyun.com, port: 25, response: -1
    Spring Cloud Gateway跨域配置
    一、Rancher单机搭建
    SpringCloud快速搭建微服务
    在Mac下为GUI程序设定环境变量
    Spring cache 使用说明
  • 原文地址:https://www.cnblogs.com/wymlvjing/p/2646434.html
Copyright © 2011-2022 走看看