亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C# 泛型详解:编写灵活、类型安全、高性能的代码

什么是泛型?

泛型允许在实际使用前,将类或方法中编程元素的数据类型规范化。换句话说,泛型让你编写的类或方法能适用于任何数据类型。

你可以用替代参数编写类或方法规范。当编译器遇到类的构造函数或方法的调用时,会生成处理特定数据类型的代码。下面的简单示例有助于理解概念:

在线演示
using System;
using System.Collections.Generic;
namespace GenericApplication {
    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 Tester {
        static void Main(string[] args) {
            // 声明 int 数组
            MyGenericArray<int> intArray = new MyGenericArray<int>(5);
            // 设置值
            for (int c = 0; c < 5; c++) {
                intArray.setItem(c, c * 5);
            }
            // 获取值
            for (int c = 0; c < 5; c++) {
                Console.Write(intArray.getItem(c) + " ");
            }
            Console.WriteLine();
            // 声明字符数组
            MyGenericArray<char> charArray = new MyGenericArray<char>(5);
            // 设置值
            for (int c = 0; c < 5; c++) {
                charArray.setItem(c, (char)(c + 97));
            }
            // 获取值
            for (int c = 0; c < 5; c++) {
                Console.Write(charArray.getItem(c) + " ");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}

编译执行上述代码,输出结果如下:

0 5 10 15 20 a b c d e

泛型的特性

泛型通过以下方式丰富你的程序:

泛型方法

前面示例使用了泛型类,也可以声明带类型参数的泛型方法。以下程序演示了该概念:

在线演示
using System;
using System.Collections.Generic;
namespace GenericMethodAppl {
    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) {
            int a, b;
            char c, d;
            a = 10; b = 20;
            c = 'I'; d = 'V';
            // 交换前显示值
            Console.WriteLine("Int values before calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values before calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);
            // 调用交换
            Swap<int>(ref a, ref b);
            Swap<char>(ref c, ref d);
            // 交换后显示值
            Console.WriteLine("Int values after calling swap:");
            Console.WriteLine("a = {0}, b = {1}", a, b);
            Console.WriteLine("Char values after calling swap:");
            Console.WriteLine("c = {0}, d = {1}", c, d);
            Console.ReadKey();
        }
    }
}

编译执行上述代码,输出结果如下:

Int values before calling swap: a = 10, b = 20
Char values before calling swap: c = I, d = V
Int values after calling swap: a = 20, b = 10
Char values after calling swap: c = V, d = I

泛型委托

可以定义带类型参数的泛型委托。例如:

delegate T NumberChanger<T>(T n);

以下示例展示了该委托的用法:

在线演示
using System;
using System.Collections.Generic;
delegate T NumberChanger<T>(T n);
namespace GenericDelegateAppl {
    class TestDelegate {
        static int num = 10;
        public static int AddNum(int p) {
            num += p;
            return num;
        }
        public static int MultNum(int q) {
            num *= q;
            return num;
        }
        public static int getNum() {
            return num;
        }
        static void Main(string[] args) {
            // 创建委托实例
            NumberChanger<int> nc1 = new NumberChanger<int>(AddNum);
            NumberChanger<int> nc2 = new NumberChanger<int>(MultNum);
            // 使用委托对象调用方法
            nc1(25);
            Console.WriteLine("Value of Num: {0}", getNum());
            nc2(5);
            Console.WriteLine("Value of Num: {0}", getNum());
            Console.ReadKey();
        }
    }
}

编译执行上述代码,输出结果如下:

Value of Num: 35
Value of Num: 175

C语言

  1. C# Hello World — 构建你的第一个C#应用程序
  2. C#关键字与标识符:规则、完整列表与最佳实践
  3. 精通C#变量与基础数据类型:完整指南
  4. C#运算符——C#运算符全面指南
  5. 掌握 C# 位运算与移位运算符:全面指南
  6. C# 基础:输入输出核心技巧完全指南
  7. C# 表达式、语句与代码块:全面指南与实战示例
  8. 掌握 C# 注释:类型、最佳实践与 XML 文档注释
  9. 掌握 C# switch 语句:语法、示例与最佳实践
  10. C# 三元运算符:条件表达式简明指南
  11. C# break 语句:用法、时机与实战示例
  12. 掌握 C# continue 语句:高效跳过循环迭代的实战指南