• C#


     泛型简介

     泛型(Generic) 允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,泛型允许您编写一个可以与任何数据类型一起工作的类或方法。

     您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。

     泛型特性

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

    • 它有助于您最大限度地重用代码、保护类型的安全以及提高性能。
    • 您可以创建泛型集合类。.NET 框架类库在 System.Collections.Generic 命名空间中包含了一些新的泛型集合类。您可以使用这些泛型集合类来替代 System.Collections 中的集合类。
    • 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。
    • 您可以对泛型类进行约束以访问特定数据类型的方法。
    • 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。
     泛型类
    namespace GenericStudy
    {
        /// <summary>
        /// 泛型类
        /// </summary>
        public class GenericClass<T>
        {
            public T[] Param { get; set; }
     
            public GenericClass(int size)
            {
                Param = new T[size];
            }
     
            public T GetParam(int index)
            {
                return Param[index];
            }
     
            public void SetParam(int index, T val)
            {
                Param[index] = val;
            }
        }
    }

    泛型方法

    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace GenericStudy
    {
        /// <summary>
        /// 泛型方法
        /// </summary>
        public class GenericMethod
        {
            public static void ConsoleType<T>()
            {
                Type t = typeof(T);
                Console.WriteLine(t.FullName);
            }
        }
    }

     泛型类与泛型方法的调用

    using System;
     
    namespace GenericStudy
    {
        /// <summary>
        /// 泛型学习
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                //泛型类
                GenericClass<int> genericClass = new GenericClass<int>(3);
                for (int i = 0; i < 3; i++)
                {
                    genericClass.SetParam(i, i + 10);
                }
                for (int i = 0; i < 3; i++)
                {
                    Console.WriteLine(genericClass.GetParam(i));
                }
     
                GenericClass<string> genericClass1 = new GenericClass<string>(5);
                for (int i = 0; i < 5; i++)
                {
                    genericClass1.SetParam(i, i.ToString());
                }
                for (int i = 0; i < 5; i++)
                {
                    Console.WriteLine(genericClass1.GetParam(i));
                }
     
                //泛型方法
                GenericMethod.ConsoleType<string>();
                GenericMethod.ConsoleType<int>();
            }
        }
    }

    泛型的参数类型约束

     where T : struct                               | T必须是一个结构类型
     where T : class                                | T必须是一个Class类型
     where T : new()                               | T必须要有一个无参构造函数
     where T : NameOfBaseClass          | T必须继承名为NameOfBaseClass的类
     where T : NameOfInterface             | T必须实现名为NameOfInterface的接口

      例如:指定T必须是Class类型

    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace GenericStudy
    {
        /// <summary>
        /// 泛型方法
        /// </summary>
        public class GenericMethod
        {
            public static void ConsoleType<T>() where T : class
            {
                Type t = typeof(T);
                Console.WriteLine(t.FullName);
            }
        }
    }

    来自:https://www.cnblogs.com/gygtech/p/14772738.html

     
  • 相关阅读:
    C# Winform 使用Quartz
    C# datagridview显示行号
    C#时间格式问题解决,不受系统时间格式影响
    PLSQL永久激活
    C#内存回收
    Modbus的通信参数存在flash中,如果改乱了,该怎么办--FreeModbus从站设计(12)
    如何把Modbus的通信参数存在单片机的flash中--FreeModbus从站设计(11)
    为什么有的PLC需要上电停止功能,能防止PLC变砖(可编程控制器 串口通信)
    让串口和Modbus初始化的参数同步起来-STM32F103、FreeModbus从站设计(6)
    STM32F103、FreeModbus从站设计(5)-如何将FreeModbus代码加入keil工程
  • 原文地址:https://www.cnblogs.com/djd66/p/15205763.html
Copyright © 2020-2023  润新知