zoukankan      html  css  js  c++  java
  • 个彻底解释 C#泛型的源代码

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace Iinterface
    {
        //声明T类型.
        public class GenericList<T> : System.Collections.Generic.IEnumerable<T>
        {
            protected Node head;
            protected Node current = null;

            // 定义一个Node类,该类也是泛型类型
            protected class Node
            {
                public Node next;
                //T类型的成员
                private T data;

                //构造函数不是泛型类型,参数类型应用了T类型
                public Node(T t)
                {
                    next = null;
                    data = t;
                }

                public Node Next
                {
                    get { return next; }
                    set { next = value; }
                }

                //属性的返回类型是T类型
                public T Data
                {
                    get { return data; }
                    set { data = value; }
                }
            }

            //构造函数
            public GenericList()
            {
                head = null;
            }

            //增加元素
            public void AddHead(T t)
            {
                Node n = new Node(t);
                n.Next = head;
                head = n;
            }

            // 迭代
            public System.Collections.Generic.IEnumerator<T> GetEnumerator()
            {
                Node current = head;
                while (current != null)
                {
                    yield return current.Data;
                    current = current.Next;
                }
            }

            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }


        /// <summary>
        /// 排序
        /// where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public class SortedList<T> : GenericList<T> where T : System.IComparable<T>
        {
            // 约束条件
            //冒泡排序
            public void BubbleSort()
            {
                if (null == head || null == head.Next)
                {
                    return;
                }
                bool swapped;

                do
                {
                    Node previous = null;
                    Node current = head;
                    swapped = false;

                    while (current.next != null)
                    {
                        if (current.Data.CompareTo(current.next.Data) > 0)
                        {
                            Node tmp = current.next;
                            current.next = current.next.next;
                            tmp.next = current;

                            if (previous == null)
                            {
                                head = tmp;
                            }
                            else
                            {
                                previous.next = tmp;
                            }
                            previous = tmp;
                            swapped = true;
                        }
                        else
                        {
                            previous = current;
                            current = current.next;
                        }
                    }
                } while (swapped);
            }
        }


       
      
        // 使用广州达内IComparable<T>.
        public class Person : System.IComparable<Person>
        {
            string name;
            int age;

            public Person(string s, int i)
            {
                name = s;
                age = i;
            }

            // 实现按照Age排序.
            public int CompareTo(Person p)
            {
                return age - p.age;
            }

            public override string ToString()
            {
                return name + ":" + age;
            }

            // 必须实现Equals操作.
            public bool Equals(Person p)
            {
                return (this.age == p.age);
            }
        }


        /// <summary>
        /// 主函数
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                //声明一个新的泛型对象.
                //Person是类型参数.
                SortedList<Person> list = new SortedList<Person>();

                //创建一个Person对象的成员.
                string[] names = new string[]
            {
                "王五",
                "赵燕",
                "李毅",
                "马龙",
                "斯托克顿",
                "克林顿",
                "马晓旭",
                "张望",
                "林炳",
                "钱龙"
            };

                int[] ages = new int[] { 45, 19, 28, 23, 18, 9, 108, 72, 30, 35 };

                //填入成员.
                for (int x = 0; x < 10; x++)
                {
                    list.AddHead(new Person(names[x], ages[x]));
                }

                //打印没有排序的成员.
                foreach (Person p in list)
                {
                    System.Console.WriteLine(p.ToString());
                }
                System.Console.WriteLine("还没有排序呢!\n");

                //排序.
                list.BubbleSort();

                //打印排序后的成员.
                foreach (Person p in list)
                {
                    System.Console.WriteLine(p.ToString());
                }

                System.Console.WriteLine("排序完成啦!");

                Console.Read();
            }
        }
    }

  • 相关阅读:
    ByteArrayInputStream&ByteArrayOutputStream源码分析
    常用FastJSON的SerializerFeature特性及日期转换格式
    SpringAware
    Zuul(SpringCloud学习笔记一)
    RabbitMQ和SpringBoot的简单整合列子
    Cngigure和BUS实现远端配置
    vagrant安装homestead环境使用总结
    sublime安装插件
    vagrant配置(假设已经安装好了vagrant并且下载好了box)
    linux php安装配置oci8模块
  • 原文地址:https://www.cnblogs.com/javaitpx/p/2784130.html
Copyright © 2011-2022 走看看