C#自定义泛型-阿里云开发者社区

开发者社区> 清山> 正文

C#自定义泛型

简介:
+关注继续查看
using System;
using System.Collections.Generic;
using System.Text;

namespace CustomGenericCollection
{
    #region 汽车的定义
    public class Car
    {
        public string PetName;
        public int Speed;

        public Car(string name, int currentSpeed)
        {
            PetName = name;
            Speed = currentSpeed;
        }
        public Car() { }
    }

    public class SportsCar : Car
    {
        public SportsCar(string p, int s)
            : base(p, s) { }
        // 其他方法
    }

    public class MiniVan : Car
    {
        public MiniVan(string p, int s)
            : base(p, s) { }
        // 其他方法
    }
    #endregion

    #region 自定义泛型集合
    public class CarCollection<T> : IEnumerable<T> where T : Car//:下面的泛型集合类的项目必须是Car 或Car的继承类
    {
        private List<T> arCars = new List<T>();
        public T GetCar(int pos)
        {
            return arCars[pos];
        }
        public void AddCar(T c)
        {
            arCars.Add(c);
        }
        public void ClearCars()
        {
            arCars.Clear();
        }
        public int Count
        {
            get { return arCars.Count; }
        }
        // IEnumerable<T>扩展自IEnumerable的,因此,我们需要实现的GetEnumerator()方法的两个版本。
        System.Collections.Generic.IEnumerator<T> IEnumerable<T>.GetEnumerator()
        {
            return arCars.GetEnumerator();
        }

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

        public void PrintPetName(int pos)
        {
            Console.WriteLine(arCars[pos].PetName);
        }
    }
    #endregion

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("***** Custom Generic Collection *****\n");
            CarCollection<Car> myCars = new CarCollection<Car>();
            myCars.AddCar(new Car("Rusty", 20));
            myCars.AddCar(new Car("Zippy", 90));

            foreach (Car c in myCars)
            {
                Console.WriteLine("PetName: {0}, Speed: {1}", c.PetName, c.Speed);
            }
            Console.WriteLine();

            // CarCollection<Car> can hold any type deriving from Car.
            CarCollection<Car> myAutos = new CarCollection<Car>();
            myAutos.AddCar(new MiniVan("Family Truckster", 55));
            myAutos.AddCar(new SportsCar("Crusher", 40));
            foreach (Car c in myAutos)
            {
                Console.WriteLine("Type: {0}, PetName: {1}, Speed: {2}",
                  c.GetType().Name, c.PetName, c.Speed);
            }

            Console.ReadLine();
        }
    }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
[C++]VC自定义发IP包例子
/************************************ *自定义发IP包例子(TCP/IP包发送) *给目标主机的端口发送一个 syn请求, *注意目标主机的信息会发给发送IP地址的主机 *这说明TCP/IP协议本身有IP期骗的漏洞 *这种方运可以自己写成特殊的基于...
741 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4624 0
C# 自定义控件固定大小
原文地址:http://blog.csdn.net/pksniq/article/details/7247131 今天做自定义,需要固定控件大小,一共找到了三种方法:  1.设置最大与最小值相等 2.在resize事件中指定大小 3.通过自定义设计器来禁止修改大小
1001 0
C++ 模版实现自定义释放类对象成员的堆内存空间
#include &lt;iostream&gt; using namespace std; template&lt;typename Type&gt; class AutoRelease { typedef void (Type::* pFunc)(void); public: AutoRelease(Type* p, pFunc pfunc) :
1035 0
.Net(C#)自定义WinForm控件之小结篇(强力推荐)
强力推荐的网站:http://www.myfirm.cn/News/dotNetGUIAPI/ 本文转载:http://www.myfirm.cn/News/dotNetUserInterface/20080216063648402.
1334 0
C# 自定义属性在propertyGrid控件中显示
在上篇文章(地址: C# 设计时动态改变实体在PropertyGrid中显示出来的属性)中可以看到: 自定义属性的显示是有问题的,那么如何修改呢? 代码如下: public class PropertyDisplayConverterr&lt;T&gt; : ExpandableObjectConverter where T : IDisplay { public
2606 0
+关注
404
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载