c#委托(Delegates)--基本概念及使用


   在我这菜鸟理解上,委托就是可以用方法名调用另一方法的便捷方法,可以简化switch等语句的重复。最近做项目的时候恰好需要用到委托,便来复习及学习委托的使用。嗯...本人以前并没有用过,只是稍微知道而已。以下是整理的笔记。

一.委托的概念

    委托是用户自定义的类,它定义了方法的类型。储存的是一系列具有相同参数和返回类型方法的地址列表,调用委托时,此委托列表的所有方法都将被执行。

二.委托类型的定义

委托类型必须在被用来创建变量以及类型对象之前声明。

委托类型的声明:

1.以delegate关键字开头。

2.返回类型+委托类型名+参数列表

delegate void MyDel(int a)

三.实例

1)现在我们先创建了控制台程序,进行简单的实例

namespace Func
{
    public delegate void MyDel();//声明一个自定义委托
    class Program
    {
        static void Main(string[] args)
        {
            MyDel say1 = SayHi;
            MyDel say2 = new MyDel(SayHi);
            say1();
            say2();
        }
        static void SayHi()
        {
            Console.WriteLine("hi");
        }
    }
}

2)扩展实例

namespace Func
{
    public delegate int MyDel(int num);//声明一个自定义委托
    class Program
    {
        static int Add1(int a)
        {
            int b = 10 + a;
            Console.WriteLine("——Add1———");
            return b;

        }

        static int Add2(int a)
        {
            int b = 10 - a;
            Console.WriteLine("——Add2———");
            return b;

        }

        static void Calculate(MyDel ex, int a)
        {
            var result = ex(a);
            Console.WriteLine(result + "\n");
        }

        static void Main(string[] args)
        {
            Calculate(Add1, 1);
            Calculate(Add2, 10);
            Console.ReadKey();
        }
    }
}

结果如下图


上面实现了把方法当作参数在另一个方法中传递或调用”;从上面可以看出,调用的方法和委托的返回类型,参数类型都必须一致。

我们可以把委托作为参数传递给封装好了的方法,通过委托来动态的调用方法。


四.委托的加减运算

可以使用+=运算符,为委托新增方法。

同样可以使用-=运算符,为委托移除方法。

当委托列表中有几个方法时,调用委托时,则会依次经过各个方法,并返回列表最后一项方法的结果。

namespace Func
{
    public delegate int MyDel(int num);//声明一个自定义委托
    class Program
    {

        static int Add1(int a)
        {
            int b = 10 + a;
            Console.WriteLine("——Add1———");
            return b;

        }

        static int Add2(int a)
        {
            int b = 10 - a;
            Console.WriteLine("——Add2———");
            return b;

        }

        static void Calculate(MyDel ex, int a)
        {
            var result = ex(a);
            Console.WriteLine(result + "\n");
        }

        static void Main(string[] args)
        {
            //Calculate(Add1, 1);
            //Calculate(Add2, 10);
            MyDel myDel = Add1;
            myDel += Add2;
            Calculate(myDel, 10);
            Console.ReadKey();
        }
    }
}

结果如下图:



那么有时候我们需要返回每个方法的结果,此方法就不适用了,那怎么才能实现每个方法的返回结果都可以获取到呢?后续再写了。今天就简单的介绍了委托的基本概念和使用。


  • 80
    点赞
  • 294
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
XNNPACK是Facebook开发的一个高效的神经网络计算库,可以加速许多神经网络模型的推理。同时,TensorFlow Lite是一个轻量级的机器学习库,可以在移动设备等资源有限的环境中运行。为了更好地利用硬件资源,我们可以使用XNNPACK来加速TensorFlow Lite模型的推理。以下是使用XNNPACK委托运行TensorFlow Lite模型的步骤: 1. 导入相关库 ```python import tensorflow as tf from tensorflow.lite.python.interpreter import Interpreter from tensorflow.lite.python.interpreter import load_delegate ``` 2. 加载模型 ```python interpreter = Interpreter(model_path="your_tflite_model.tflite") interpreter.allocate_tensors() ``` 3. 加载XNNPACK委托 ```python delegate = load_delegate('libnpx.so') interpreter = Interpreter(model_path="your_tflite_model.tflite", experimental_delegates=[delegate]) interpreter.allocate_tensors() ``` 4. 运行模型 ```python input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() # 假设输入是一个形状为(1, 224, 224, 3)的图像 input_data = np.random.rand(1, 224, 224, 3).astype(np.float32) interpreter.set_tensor(input_details[0]['index'], input_data) interpreter.invoke() output_data = interpreter.get_tensor(output_details[0]['index']) ``` 这样,我们就可以使用XNNPACK委托运行TensorFlow Lite模型了。使用XNNPACK可以显著提高模型推理的速度,并且在移动设备等资源有限的环境中特别有用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值