C#中的Invoke

这篇具有很好参考价值的文章主要介绍了C#中的Invoke。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在 C# 中,Invoke() 是一个用于调用方法的方法,它能够在运行时动态地调用一个方法。

Invoke() 方法的使用方式有两种:

  1. 通过 MethodInfo 对象调用:
using System.Reflection;

namespace ConsoleApp_Invoke
{
    public class Program
    {
        static void Main(string[] args)
        {
            MethodInfo openMethodInfo = typeof(MyStore).GetMethod("Open");
            openMethodInfo.Invoke(new MyStore(), null);  // 如果调用的方法参数为空,则第二个参数为null

            MethodInfo sellMethodInfo = typeof(MyStore).GetMethod("Sell");
            sellMethodInfo.Invoke(new MyStore(), new object[] { "苹果", 10 });  // 如果调用的方法有参数,则第二个参数传递一个参数数组
        }
    }

    public class MyStore
    {
        public void Open()
        {
            Console.WriteLine("早上商店进行开张了");
        }

        public void Sell(string Name, int count)
        {
            Console.WriteLine($"出售{count}{Name}");
        }
    }
}

在上面的示例中,我们首先通过 typeof(MyStore).GetMethod("MyMethod") 获取了 Open 方法的 MethodInfo 对象,然后使用 Invoke() 方法调用该方法。

Invoke() 方法接受两个参数:

  • 第一个参数是要调用方法的对象实例,如果方法是静态的,则可以传递 null

  • 第二个参数是方法的参数数组,如上面我们调用Sell方法。

  1. 通过委托调用:
Action<string> myDelegate = new MyClass().MyMethod; // 创建委托对象
myDelegate.Invoke("Hello"); // 调用委托

在上面的示例中,我们首先创建了一个 Action<string> 委托对象,并将其初始化为 MyMethod 方法,然后使用 Invoke() 方法调用委托。与第一种方式相比,这种方式更加简洁,但使用委托调用方法需要确保委托的签名与要调用的方法的签名匹配。

无论使用哪种方式,Invoke() 方法都可以用于调用方法并传递参数。

需要注意的是,Invoke() 方法的调用可能会引发 TargetExceptionMethodAccessExceptionTargetInvocationException 等异常,所以在实际使用中应该进行异常处理。文章来源地址https://www.toymoban.com/news/detail-629690.html

到了这里,关于C#中的Invoke的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#中 Invoke和BeginInvoke的区别详解

    一、Invoke和BeginInvoke方法,主要用于子线程操作主线程UI的控件,修改控件属性等。 (1)Invoke同步运行,会等待代码运行完之后返回,线程会阻塞。 (2)BeginInvoke异步运行,调用之后立即返回,不会等待修改控件代码执行完。不会阻塞。 故由上述可知,Invoke和BeginInvoke方法由

    2024年01月19日
    浏览(37)
  • 【C#性能】C# 语言中的数组迭代

            可迭代性,是数组等操作的根本;在C++程序开发过程中,可迭代操作是非常普遍、非常广泛的,然而,对这种操作知道多少,又不知道多少,都将影响开发灵活性、开发的进度。因此,本文干脆系统地全部列举这种应用,以便在使用时查阅。         实现数组

    2024年02月15日
    浏览(48)
  • Java中的反射(通过反射获取类的结构、invoke方法、获取注解)

    创建运行时类的对象是反射机制应用最多的地方。创建运行时类的对象有两种方式: 方式1:直接调用Class对象的newInstance()方法 要求: 1)类必须有一个无参数的构造器。 2)类的构造器的访问权限需要足够。 方式一的步骤 : 1)获取该类型的Class对象 2)调用Class对象的 new

    2024年02月04日
    浏览(49)
  • C 语言实现 C# 中的 List 泛型列表

    //下面是一个简单的用 C 语言实现 C# 中的 List 泛型列表的示例代码,代码中有详细的注释,帮助你理解代码的实现细节。 人工智能生成的. 以后可以用人工智能实现很多代码了. 简单的活让它来干.

    2024年02月10日
    浏览(45)
  • 基于C#语言的GUI开发,主要介绍WPF框架

    下面是几种常见基于.Net的界面开发框架,都是Microsoft提供,下面简介由GPT生成 WinForms (Windows Forms WPF (Windows Presentation Foundation) UWP (Universal Windows Platform) MAUI (Multi-platform App UI) WinForms(Windows Forms): 介绍: WinForms是由Microsoft提供的用于开发Windows桌面应用程序的UI框架。它使用简单

    2024年02月03日
    浏览(42)
  • Unity使用c#开发遇上的问题(一)(c#中无法引入input,双击unity中的c#文件无反应,unity中刚体设置后仍然穿越问题)

    闲着无聊,想用unity编一编小游戏,遇上的坑(一) 我使用的是vs2019,unity版本是2022.1,下载器Hub。 在asset中创建c#脚本移动cube。在写入X,Y偏移量时没有unity引擎的Input函数。 解决方法: 1.首选项中设置中文语言。

    2024年02月07日
    浏览(57)
  • 【Java】后端开发语言Java和C#,两者对比注解和属性的区别以及作用

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《Java》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年01月16日
    浏览(51)
  • 以太坊智能合约开发:Solidity语言中的映射

    本文我们介绍Solidity语言中的映射,包括映射的基本定义、语法、映射的变量声明和基本读写操作。并且通过两个智能合约例子演示了映射的定义与基本操作。 Solidity中关于映射的一些定义: 映射以键-值对(key = value)的形式存储数据; 键可以是任何内置数据类型,包括字节

    2024年02月05日
    浏览(54)
  • 以太坊智能合约开发:Solidity 语言中的数据类型

    本文我们介绍Solidity语言的数据类型,重点是值类型,包括布尔类型、整型、地址类型、字节类型、字符串类型和枚举类型。并且通过两个智能合约例子,用于演示这些数据类型的声明与使用方法。 访问 Github 仓库 获取更多资料。 Solidity中关于数据类型的定义如下: Solidity是

    2024年02月02日
    浏览(67)
  • 以太坊智能合约开发:Solidity语言中的构造函数

    Solidity语言中关于构造函数的定义: 构造函数是使用 constructor 声明的一个可选函数; 构造函数只在合约部署时调用一次,并用于初始化合约的状态变量; 如果没有显式定义的构造函数,则由编译器创建默认构造函数。 构造函数声明语法如下: 其中: ** constructor :

    2024年02月01日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包