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

 

发布了112 篇原创文章 · 获赞 4 · 访问量 5240
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览