如何将值/参数传递给“public delegate void”?

时间:2017-10-05 06:01:34

标签: c# visual-studio xamarin

请帮我解决这个问题。假设我在这里有这个代码......

    void IScanSuccessCallback.barcodeDetected(MWResult result)
    {
        if (result != null)
        {
            try
            {
                var scan = Element as BarcodeScannerModal;

                if (scan == null)
                    return;
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }
        }
    }

...我希望将MWResult结果的值传递给这个......

[System.Runtime.InteropServices.ComVisible(true)]
        public delegate void EventScanHandler(MWResult result);

我真的遇到了这个问题。

2 个答案:

答案 0 :(得分:1)

如何使用基本委托void。委托void是引用对象或void的方法。它几乎就像一个占位符,如果你有两个相同的功能,你需要切换功能,而不是数字(将 5 + 5 中的+转换为*,如 5 * 5 ,下面的示例显示了如何执行此操作。它也必须是一个int作为返回!您还可以将其转换为空白以执行功能 )。在您的情况下,您想要扫描条形码然后检查它是否是null所以我对您为什么要使用委托空格感到困惑。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    //delegates are mostly defined outside of the class
    public delegate int addn(int num1, int num2);

    //the main class

    class Program
    {
        //delegate functions
        public static int add1(int num1, int num2)
        {
            return num1 + num2;
        }

        public static int add2(int num1, int num2)
        {
            return num1 * num2;
        }

        //entry
        public static void Main()
        {
            //here we can reference delegates as a class. its
            //called addf in this case.

            //first we init add1
            addn addf = new addn(add1);
            Console.WriteLine(addf(5, 5));

            //then we innit add2. note we dont add /*addn*/ in the beginning because
            //its already defined
            addf = new addn(add2);
            Console.WriteLine(addf(5, 5));

            //loop

            while (true) ;
        }
    }
}

除非你使用不同版本的 IScanSuccessCallback.barcodeDetected ,我只是直接调用它,将值存储在一个类中,然后使用[System.Runtime.InteropServices.ComVisible(true)] public delegate void EventScanHandler(类名result);

答案 1 :(得分:1)

委托是一种表示方法引用的类型。

ScanSuccessCallbackImpl t = new ScanSuccessCallbackImpl();
EventScanHandler method = t.barcodeDetected;
method(new MWResult());

这是否回答了你的问题?