C#在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
小登b事多 发布于:2024-11-26 10:10 大于5个字才能保存 发布于:2024-11-21 13:40 date & smt label 发布于:2024-11-20 13:53 这段代码是书上最初始的代码结构,后面的代码都在这个结构下编写运行 发布于:2024-10-30 11:19 卫星位置计算 发布于:2024-10-13 19:32 观察者模式 发布于:2024-10-13 15:53 抽人回答问题(随机抽人) 发布于:2024-10-12 13:37 substring用法 发布于:2024-10-10 09:52 逆转数计算 发布于:2024-10-09 22:12 猜数字游戏 发布于:2024-10-09 10:16 猜数字大小 发布于:2024-10-08 22:12 圆的周长等 发布于:2024-09-29 19:43 交换的方法 测试编译器 发布于:2024-09-05 13:57 交换的方法测试 发布于:2024-09-05 13:48 这是一个测试 发布于:2024-08-25 22:04 FSM有限状态机 发布于:2024-08-23 14:58 UGUI框架 发布于:2024-07-29 16:26 Planar Reflection 发布于:2024-07-26 09:11 ScriptableObject基础 发布于:2024-07-26 09:11 多个参数只识别第一个 发布于:2024-07-24 16:34 AnimationParam and PlayerStatus 发布于:2024-08-01 16:46 深度贴花shader启蒙 发布于:2024-07-16 12:36 通过UnityWebRequest获取本地StreamingAssets文件夹 发布于:2024-07-15 11:24 AES加密工具C#代码示例 发布于:2024-07-12 11:24 # 不锈钢库存管理单机版 发布于:2024-07-11 21:53 观察者模式 发布于:2024-06-21 14:12 c#实验三项目 发布于:2024-06-14 13:00 UnityEvent的Input System设置 发布于:2024-06-07 17:19 Unity New Input System用法 发布于:2024-06-07 16:25 5. 查找两个整数中的最大值 发布于:2024-05-29 13:20 4. 处理整数数组 发布于:2024-05-29 13:18 2. 提示用户输入用户名和密码 发布于:2024-05-29 13:16 1. 定义四个变量并打印信息 发布于:2024-05-29 13:14 热更新思路 发布于:2024-05-24 17:19 两数之和的解法 发布于:2024-05-24 11:06 正则表达式 发布于:2024-05-23 08:59 Lua调用CSharp 发布于:2024-05-22 15:49 LuaFunction接收 发布于:2024-05-21 12:47 访问Lua的function 发布于:2024-05-21 12:41 映射到LuaTable,不推荐使用 发布于:2024-05-20 17:40 通过Dictionary和List访问Lua变量 发布于:2024-05-20 17:32 判断哪种方式计算圆周率最快精度最高 发布于:2024-05-17 08:29 Unity使用Enum的几个小技巧 发布于:2024-05-16 17:15 映射到interface 发布于:2024-05-16 16:05 映射到CSharp的类 发布于:2024-05-16 15:41 CSharp Call Lua 发布于:2024-05-16 15:30 xLua课程2 发布于:2024-05-09 12:41 c# learning code 发布于:2024-05-09 09:26 C# timer测试 发布于:2024-05-06 20:07 QFrameWork学习 发布于:2024-04-22 10:11 [更多]
显示目录

泛型(Generic)



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

C# 泛型(Generic)

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

您可以通过数据类型的替代参数编写类或方法的规范。当编译器遇到类的构造函数或方法的函数调用时,它会生成代码来处理指定的数据类型。下面这个简单的实例将有助于您理解这个概念:

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) {
            // 声明一个整型数组
            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

泛型(Generic)的特性

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

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

泛型(Generic)方法

在上面的实例中,我们已经使用了泛型类,我们可以通过类型参数声明泛型方法。下面的程序说明了这个概念:

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
            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

泛型(Generic)委托

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

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
由JSRUN为你提供的C#在线运行、在线编译工具
        JSRUN提供的C# 在线运行,C# 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout