浅谈泛型

本文通过具体的示例介绍了如何使用泛型提高代码的复用性和灵活性,并展示了泛型在.NET框架中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       很感谢组织给我一次讲课的机会。本次讲的是泛型,看过一遍.NEt之美,回过头来再看的时候,发现很多以前没看懂得东西,现在再次的翻开书看的时候,发现我能理解很多,同时也能根据自己动手敲代码发现新的问题。


Why

       先看一段排序的代码:

//冒泡排序 
public class SortHelper
    {
        public void BubbleSort( int[] array)
        {
            int length = array.Length;

            for (int i = 0; i <= length - 2; i++)
            {
                for (int j = length - 1; j >= 1; j--)
                {

                    // 对两个元素进行交换
                    if (array[j] < array[j - 1])
                    {
                        int temp = array[j];
                        array[j] = array[j - 1];
                        array[j - 1] = temp;
                    }
                }
            }
        }
class Program
    {
        static void Main(string[] args)
        {
            SortHelper sorter = new SortHelper();

            int[]  array = { 8, 1, 4, 7, 3 };

            sorter.BubbleSort(array);

            foreach (int i in array)
            {
                Console.Write("{0} ", i);
            }

            Console.WriteLine();
            Console.ReadKey();
        }
    }

        这是一段对Int型数组进行排序。如果我要对char类型和byte类型进行排序又是如何?

难道我们要这样做吗?

       我们会发现,这样做的虽然第一次复制,效率要高一些,但是第二次,呢,但是这样做,确实加重了服务器的负担。如果这个功能以后不再扩展了,那么我们就没必要花费大把的时间去做一个很Perfect的方案,但是这个功能以后还是要用的,所以我们要完善一下下。

        这时候我们就想到了——泛型。


What

       泛型是程序设计语言的一种特性。将类型参数化以达到代码复用提高软件开发工作的效率的一种数据类型。其实他也是一种数据类型。使用泛型,能提高代码复用率,使得代码更加灵活。


How

        修改我们之前的Demo

public class Book : IComparable
        {
            private String name;
            private int price;
            public String Name
            {
                get{ return this.name;}              
            }
            public Int32 Price
            {
                get { return this.price; }            
            }
            public Book(string name, int price)
            {
                this.name = name;
                this.price = price;
            }
            //s实现接口,要告诉它返回什么类型的,根据什么进行比较
            public int intCompareTo(object obj)
            {
                Book book = (Book)obj;
                return this.price.CompareTo(book.price);
            }
        }
//泛型约束
    public interface IComparable
    {
        int intCompareTo(Object obj);
    }
    public class SortHelper<T> where T : IComparable
    {

        public void BubbleSort(T[] array)
        {
            int length = array.Length;

            for (int i = 0; i <= length - 2; i++)
            {
                for (int j = length - 1; j >= 1; j--)
                {

                    // 对两个元素进行交换
                    if (array[j].intCompareTo(array[j - 1]) < 0)
                    {
                        T temp = array[j];
                        array[j] = array[j - 1];
                        array[j - 1] = temp;
                    }
                }
            }
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            Book[] BookArry = new Book[2];
            Book book1 = new Book(".Net之美", 123);
            Book book2 = new Book("Java讲义", 45);
            BookArry[0] = book1;
            BookArry[1] = book2;

            SortHelper<Book> sorter = new SortHelper<Book>();
            sorter.BubbleSort(BookArry);
            foreach (Book h in BookArry)
            {
                Console.WriteLine("name:{0}", h.Name);
                Console.WriteLine("price{0}\n", h.Price);

            }
        }
    }

       这样修改了我们的代码。为什么在最开始的时候我就说一定要动手操作,只有动手了才能知道这个泛型约束的作用。因为我们不确定T是什么类型的,我们要给他一个约束,这就是类型约束,在比较的时候,比如说是两本书进行比较,我们也不知道是比较名称还是比较价钱,这也用到了约束。根据以上代码,可以大概了解一下泛型约束。


总结:

       为什么用泛型,有一句话:fool me once,shame on you;fool me towice,shame on me.愚弄我一次,是你的不对,愚弄我两次,是我的过失。泛型提高代码的复用率,给我们节省了很多时间,同时使用泛型也会是电脑运行速度变快,这个如果大家做过.Net之美上边的例子就会懂得。同时泛型也会和反射结合起来,这也是常见的一种写法,不管是和谁结合,但是他们最终的目的都是一样的,提高代码的复用率。



评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值