码迷,mamicode.com
首页 > Windows程序 > 详细

第2张 C#中的泛型

时间:2016-03-26 12:26:06      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:

2.1 理解泛型
2.1.1 为什么要有泛型

并不一定要使用字符T作为类型参数的名称,也可以使用其他的字符,但习惯上使用T。

2.1.2 类型参数约束
什么是“向下的强制转换(downcast)”?因为Object是所有类型的基类,Book类继承自Object类,在这个金字塔状的继承体系中,Object位于上层,Book位于下层,所以将Object转换为Book称作“向下的强制转换”。

技术分享
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Text.RegularExpressions;

namespace _.net之美
{
    class Program
    {
        static void Main(string[] args)
        {
            Book[] books=new Book[2];
            Book book1 = new Book(10, "book1");
            Book book2 = new Book(20, "book2");
            books[0] = book1;
            books[1] = book2;
            SortHelper<Book> sortHelper = new SortHelper<Book>();
            sortHelper.BubbleSort(books);
            foreach (Book book in books)
            {
                Console.WriteLine("{0},{1}", book.Price, book.Title);
            }
            Console.Read();
        }
    }

    public class SortHelper<T> where T : IComparable
    {
        public void BubbleSort(T[] array)
        {
            int length = array.Length;
            for (int i = 0; i < length-1; i++)
            {
                for (int j = 0; j < length - 1 - j; j++)
                {
                    if (array[j].CompareTo(array[j + 1]) > 0)
                    {
                        T tmp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = tmp;
                    }
                }
            }
        }
    }

    public class Book:IComparable
    {
        decimal price;
        string title;
        public Book() { }
        public Book(decimal price, string title)
        {
            this.price = price;
            this.title = title;
        }
        public decimal Price
        {
            get { return this.price; }
        }

        public string Title
        {
            get { return this.title; }
        }

        public int CompareTo(object obj)
        {
            Book book = (Book)obj;
            return this.Price.CompareTo(book.Price);
        }
    }
}
View Code

 

2.2 泛型与集合类型
2.2.1 避免隐式的装箱和拆箱
使用List<T>比使用ArrayList提高了差不多3倍性能。当使用一个大的值类型时,比如枚举或者结构,获得的差异还会更大。(P25)

2.2.2 编译时的类型安全
2.2.3 使用泛型的一个小技巧

第2张 C#中的泛型

标签:

原文地址:http://www.cnblogs.com/liuslayer/p/5322294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!