C# 通过反射以及动态调用方法

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

有时候需要通过反射以及动态调用的办法去调用已知的实例的方法,感觉还是挺巧妙的。以下主要记录通过反射以及动态的调用方法。

  public class Program
    {
        static void Main(string[] args)
        {
            IPerson person = new Peter();
            try 
            {
  
                System.Console.WriteLine("================反射机制===============");
                var p = person.GetType().GetMethod("WriteGirlFirendName");
                object[] a = new object[] { "beatiful", 21 };
                var r = p.Invoke(person, a);//带参数及返回值的
                System.Console.WriteLine(r);
                p = person.GetType().GetMethod("Write");
                p.Invoke(person, null);//无参数和返回值的
            
                 System.Console.WriteLine("================动态机制===============");
                dynamic pp = person;
                var rr = pp.WriteGirlFirendName("girl", 20);//带参数返回值的
                System.Console.WriteLine(rr);
                pp.Write();//无参数和返回值的

            }
            catch (Exception ex) 
            {
                System.Console.WriteLine(ex.Message);
            }
            System.Console.ReadLine();
        }

        public static void play()
        {
            string path = @"F:\Kwmusic\KwDownload\song\Alarm.wav";
            SoundPlayer player = new SoundPlayer(path);

            player.PlayLooping();

            Thread.Sleep(10000);
            System.Console.WriteLine("输入1停止,2重放");

            System.Console.ReadLine();
            player.Stop();
        }
    }

    public interface IPerson
    {
        void GetName();
    }

    public class Peter : IPerson
    {
        public void GetName()
        {
            System.Console.WriteLine("name");
        }
        //带参数
        public int WriteGirlFirendName(string name,int age)
        {
            System.Console.WriteLine($"{name} {age}");

            return age;
        }

        //不带参数的
        public void Write()
        {
            System.Console.WriteLine("不带参数方法。");
        }
    }

运行结果如下图所示:
C# 通过反射以及动态调用方法,c#,开发语言
总结:在已知方法的情况下,还是动态调用比较方便,但是要注意异常处理,毕竟这属于特殊情况,编译执行前不会给提示的。文章来源地址https://www.toymoban.com/news/detail-729222.html

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

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

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

相关文章

  • gin通过反射来执行动态的方法

    在gin中,可以通过反射来执行对应的方法。下面是一个示例: 在这个示例中,我们定义了一个 UserController 结构体,并在结构体中定义了 GetUser 方法和 queryUser 方法。 GetUser 方法用于处理请求并返回用户数据, queryUser 方法用于查询用户信息。 在主函数中,我们创建了 UserCon

    2024年02月14日
    浏览(44)
  • 【C#】Sql Server 设置IN查询方法内的参数,固定参数、动态参数以及通过分隔含有逗号隔开的字符串转数据集

    在平时使用sql语句查询时,in查询肯定少不了,多数用于一些数据统计或者测试类。in查询并不建议放到实际常用的查询列表里。 此篇文章主要简单聊聊,in查询方法内的参数设置方式,以及通过分隔函数将含有逗号隔开的字符串转为数据集进行查询 在 SQL Server 中,你可以使

    2024年02月15日
    浏览(53)
  • C#利用自定义特性以及反射,来提大型项目的开发的效率

      在大型项目的开发过程中,需要多人协同工作,来加速项目完成进度。 比如一个软件有100个form,分给100个人来写,每个人完成自己的Form.cs的编写之后,要在Mainform调用自己写的Form。 如果按照正常的Form form1 = new Form()这种写法来构造窗口的话,相当于每个人都要改动Mainfo

    2024年02月14日
    浏览(41)
  • .NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法

    前段时间有朋友问道一个这样的问题,.NET Core中如何通过Attribute的元数据信息来调用标记的对应方法。我第一时间想到的就是通过C#反射获取带有Custom Attribute标记的类,然后通过依赖注入(DI)的方式获取对应服务的方法并通过反射动态执行类的方法,从而实现更灵活的编程

    2023年04月15日
    浏览(43)
  • 【Unity】 基础交互入门(C#脚本互相调用的方法,含动态绑定脚本)

    脚本A: 在需要被调用的类里这样写: 脚本B: 在其他类里调用: 如果出现无法识别上下文的提示,检查一下以下问题: 1、两个脚本的命名空间是否一致,如果不需要的命名空间可以直接删除。 2、类名是否大写开头,且命名合法,且和文件名一致。 3、更新编译一下保存一

    2024年02月15日
    浏览(52)
  • 【C#】反射机制,动态加载类文件

    【C#】编号生成器(定义单号规则、固定字符、流水号、业务单号) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787 【C#】日期范围生成器(开始日期、结束日期) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663 【C#】组件化开发,调用dll组件方法 本文链接

    2024年02月11日
    浏览(60)
  • C# Assembly 反射动态加载程序集(动态加载Dll)Demo

    No1、本Demo 定义了一个接口IserviceToolFrame,接口中有一个方法Run。 No2、在另外两个工程中,分别定义两个类serviceToolCatComplete、serviceToolDogComplete实现接口IserviceToolFrame。 No3、控制台程序通过动态加载Dll的方式去调用IserviceToolFrame的实例,输出不同的内容。代码如下: 动态加载

    2024年02月15日
    浏览(53)
  • 微信小程序通过js动态修改css样式的方法,以及css变量

    不知道各位小帅有没有遇到这种问题,在微信小程序开发的时候,我们想要将某个文字大小变大,那么本篇文章就是解决这个问题。

    2024年02月06日
    浏览(53)
  • 【C#】实体类和DataTable之间相互转换,实体反射动态遍历列

    在实际项目中,经常会用到数据之间的相互转换,序列化和反序列化就是常见场景。这里我们只简单聊聊实体类和DataTable之间的相互转换,可以用于不同业务场景使用。 要将C# DataTable 转换为 Model 实体类,你可以使用反射来获取 DataTable 的列和值,并通过实例化 Model 类来赋值

    2024年02月15日
    浏览(33)
  • C#反射实现插件式开发

    插件式架构,一种全新的、开放性的、高扩展性的架构体系。插件式架构设计好处很多,把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现。扩展功能与框架以一种很松的方式耦合,两者在保持接口不变的情况下,可以独立变化和发布。基于插件设计并不

    2024年02月08日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包