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();
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于C#编程语言的问题,下面是答案: 我们可以创建一个名为Calculator的自定义泛型类,并在其中定义一个Add泛型方法。这个方法可以接受任意类型的参数,并计算两个参数的和。以下是代码实现: ``` public class Calculator<T> { public T Add(T num1, T num2) { dynamic dynamicNum1 = num1; dynamic dynamicNum2 = num2; return dynamicNum1 + dynamicNum2; } } ``` 在上面的代码中,我们使用了C# 4.0中引入的dynamic类型。这个类型可以在运行时决定变量的类型,从而允许我们对任意类型的参数进行加法操作。在Add方法中,我们首先将num1和num2转换为dynamic类型,并将它们相加。最后,我们将结果返回。 现在,我们可以使用这个自定义泛型类Calculator来计算任意类型的两个数的和。以下是使用示例: ``` Calculator<int> intCalculator = new Calculator<int>(); int sum1 = intCalculator.Add(5, 10); // sum1 = 15 Calculator<double> doubleCalculator = new Calculator<double>(); double sum2 = doubleCalculator.Add(3.14, 2.71); // sum2 = 5.85 Calculator<string> stringCalculator = new Calculator<string>(); string sum3 = stringCalculator.Add("Hello", " World"); // sum3 = "Hello World" ``` 在上面的代码中,我们分别使用了int、double和string类型来创建三个不同的Calculator对象,并调用了它们的Add方法来计算两个数的和。可以看到,这个自定义泛型类可以非常方便地处理任意类型的参数,从而使我们的代码更加灵活和可重用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值