C# 泛型(Generic)

Generic - 未注册的,泛型编程。

泛型(Generic)的特性

使用泛型是一种增强程序功能的技术,具体表现在以下几个方面:

  • 它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
  • 您可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
  • 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
  • 您可以对泛型类进行约束以访问特定数据类型的方法。
  • 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。

泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。

实例:

using System;

namespace CSharpTest01
{
    public class MyGenericArray<T>
    {
        private T[] array;
        public MyGenericArray(int size)
        {
            array = new T[size + 1];
        }
        public T GetItem(int index)
        {
            return array[index];
        }
        public void SetItem(int index, T value)
        {
            array[index] = value;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Program Start");
            // 声明一个整型数组
            MyGenericArray<int> intArray = new MyGenericArray<int>(5);
            // 设置值
            for (int i = 0; i < 5; i++)
            {
                intArray.SetItem(i, i * 5);
            }
            // 获取值
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(intArray.GetItem(i) + " ");
            }
            Console.WriteLine();
            // 声明一个字符数组
            MyGenericArray<char> charArray = new MyGenericArray<char>(5);
            for (int i = 0; i < 5; i++)
            {
                charArray.SetItem(i, (char)(i + 97));
            }
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine(charArray.GetItem(i) + " ");
            }
            Console.ReadKey();
        }
    }
}

泛型(Generic)方法

using System;

namespace CSharpTest01
{
    class Program
    {
        static void Swap<T>(ref T lhs, ref T rhs)
        {
            T temp;
            temp = lhs;
            lhs = rhs;
            rhs = temp;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("Program Start");
            int a = 10, b = 20;
            string c = "100", d = "200";
            Console.WriteLine("{0} {1} {2} {3}", a, b, c, d);

            Swap<int>(ref a, ref b);
            Swap<string>(ref c, ref d);
            Console.WriteLine("{0} {1} {2} {3}", a, b, c, d);

            Console.ReadKey();
        }
    }
}

 

泛型(Generic)委托

通过类型参数定义泛型委托。例如:

delegate T NumberChanger<T>(T n);

委托使用的例子:

using System;

namespace CSharpTest01
{
    delegate T NumberChange<T, U, V>(T t, U u, V v);

    class TestDelegate
    {
        static int num = 10;
        public int AddNum(int p, String s, double d)
        {
            num += p;
            num = s == null ? num : (int)d;
            return num;
        }
        public string MultNum(string s, int p, double d)
        {
            Console.WriteLine(s);
            return s;
        }
        public int GetNum()
        {
            return num;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Program Start");
            TestDelegate testDelegate = new TestDelegate();
            // 创建委托实例
            NumberChange<int, string, double> nc1 = new NumberChange<int, string, double>(testDelegate.AddNum);
            // 使用委托对象调用方法
            nc1(123, "123", 123.456);
            Console.WriteLine(testDelegate.GetNum());
            NumberChange<string,int,double> nc2 = new NumberChange<string, int, double>(testDelegate.MultNum);
            nc2("123", 456, 123.456);
            
            Console.ReadKey();
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kerven_HKW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值