首页 > 编程语言 >c# 反射调用方法

c# 反射调用方法

时间:2024-10-08 17:36:10浏览次数:1  
标签:反射 调用 Console name c# 参数 new type string

文件目录:

 SqlServerDBHlper.cs文件内容:

using System.Xml.Linq;

namespace ZHAOXI.DBHlper
{
    public class SqlServerDBHlper
    {
        public SqlServerDBHlper()
        {
            Console.WriteLine(this.GetType() + "=====无参数构造函数");
        }
        public SqlServerDBHlper(string name)
        {
            Console.WriteLine(this.GetType() + "=====有参数构造函数: "+ name);
        }
        public void Test()
        {
            Console.WriteLine(this.GetType() + "=====无参数重载方法");
        }
        public void Test(string name)
        {
            Console.WriteLine(this.GetType() + "=====有参数重载方法string: " + name);
        }
        public void Test(string name, int id)
        {
            Console.WriteLine(this.GetType() + "=====有参数重载方法string,int: " + name+" " +id);
        }
        public void Test(int id, string name)
        {
            Console.WriteLine(this.GetType() + "=====有参数重载方法int,string: " + id + " " + name);
        }

        private void Show()
        {
            Console.WriteLine(this.GetType() + "===Show==无参数私有方法");
        }
        private void Show(string name)
        {
            Console.WriteLine(this.GetType() + "===Show==有参数私有方法name: " + name);
        }
        private void Show(string name,int id)
        {
            Console.WriteLine(this.GetType() + "===Show==有参数私有方法name,id: " + name+" "+id);
        }

        public static void Prod()
        {
            Console.WriteLine(typeof(SqlServerDBHlper) + "===无参数静态方法");
        }
        public static void Prod(string name)
        {
            Console.WriteLine(typeof(SqlServerDBHlper) + "===有参数静态方法name: "+ name);
        }
    }
}

Program.cs内容:

using System.Reflection;

//Assembly assembly = Assembly.LoadFrom("ZHAOXI.DBHlper.dll");
//Assembly assembly = Assembly.Load("ZHAOXI.DBHlper");
Assembly assembly = Assembly.LoadFile(@"C:\Users\YCFK-228\Desktop\asp.net core\ZAOXI.JIAOYU\bin\Debug\net8.0\ZHAOXI.DBHlper.dll");
Type type = assembly.GetType("ZHAOXI.DBHlper.SqlServerDBHlper");
object? obj = Activator.CreateInstance(type);

//调用有参数构造方法
Activator.CreateInstance(type, new object[] { "龙卷风摧毁停车场" });

//调用无参数重载方法
MethodInfo methodInfo = type.GetMethod("Test",new Type[] {});
methodInfo.Invoke(obj, null);

//调用有参数重载方法
MethodInfo methodInfo1 = type.GetMethod("Test", new Type[] {typeof(string)});
methodInfo1.Invoke(obj, new object[] {"龙卷风摧毁停车场"});

//调用有参数重载方法
MethodInfo methodInfo2 = type.GetMethod("Test", new Type[] { typeof(string),typeof(int) });
methodInfo2.Invoke(obj, new object[] { "龙卷风摧毁停车场", 10086 });

//调用有参数重载方法
MethodInfo methodInfo3 = type.GetMethod("Test", new Type[] { typeof(int), typeof(string) });
methodInfo3.Invoke(obj, new object[] { 10086, "龙卷风摧毁停车场" });

//调用无参数私有方法
MethodInfo methodShow = type.GetMethod("Show", BindingFlags.Instance | BindingFlags.NonPublic,new Type[] {});
methodShow.Invoke(obj, null);

//调用有参数私有方法
MethodInfo methodShow1 = type.GetMethod("Show", BindingFlags.Instance | BindingFlags.NonPublic, new Type[] { typeof(string)});
methodShow1.Invoke(obj, new object[] { "龙卷风摧毁停车场" });

//调用有参数私有方法
MethodInfo methodShow3 = type.GetMethod("Show", BindingFlags.Instance | BindingFlags.NonPublic, new Type[] { typeof(string) ,typeof(int)});
methodShow3.Invoke(obj, new object[] { "龙卷风摧毁停车场" ,10086});

//调用无参数静态方法
MethodInfo methodShow4 = type.GetMethod("Prod",new Type[] {});
methodShow4.Invoke(obj, new object[] { });
//调用无参数静态方法
MethodInfo methodShow5 = type.GetMethod("Prod", new Type[] { typeof(string)});
methodShow5.Invoke(obj, new object[] { "龙卷风摧毁停车场" });

运行结果: 

 

标签:反射,调用,Console,name,c#,参数,new,type,string
From: https://www.cnblogs.com/tlfe/p/18452143

相关文章

  • Springboot中统一启动多个socketIO
    前言这篇随笔属实没想到一个好名字,起因是在项目中遇到了一个springboot服务会发出多个socket服务的场景,而且我们使用的是socketIO服务,为了减少调试工作和重复的开发工作,让开发在项目中专注于业务编写,因此封装了一个在启动springboot服务时,自动创建socketIONamespace的逻辑依赖......
  • Capital许可证管理最佳实践
    随着企业对于软件依赖程度的不断加深,Capital许可证管理成为了确保软件合规使用和提升工作效率的关键环节。本文将介绍Capital许可证管理的最佳实践,帮助企业实现软件资产的最大化利用和合规性保障。一、建立清晰的许可证管理策略企业应制定明确的Capital许可证管理策略,包括许可证......
  • Scala函数进阶
    (一)函数的字面量用语法1,语法为:(参数列表)=>{方法体}2,函数的字面量作用由于scala的函数字面量没有定义函数名,所以可以通过变量进行调用。另外,也可以通过参数的方式进行调用,关于这种方式的介绍将在scala的函数高阶中进一步说明,这里不在展开叙述。3,scala的函数字面简化第一......
  • AIGC底层技术介绍
    1.AIGC概述AIGC,全称ArtificialIntelligenceGeneratedContent,即人工智能生成内容。这是一种新兴的人工智能技术,其核心思想是利用人工智能模型,根据给定的主题、关键词、格式、风格等条件,自动生成各种类型的文本、图像、音频、视频等内容。1.1定义与背景AIGC,即人工智能生成内容,是......
  • CSS3属性选择器
    属性选择器选择符                       简介E[att]                   选择具有att属性的元素E[att="val"]          选择具有att属性且属性值等于val的E元素E......
  • Linux csplit命令
    csplit命令在Linux中用于将文件分割成多个部分,基于指定的模式或固定数量的行。与split命令不同,csplit允许更复杂的分割条件,例如基于正则表达式匹配或特定字符的出现次数。基本语法csplit[选项]文件名模式文件名:要分割的文件。模式:分割文件的依据,可以是正则表达式或数字。......
  • 在vscode开发平台中编写HTML的基础快门键以及安装插件
    1、HTML5是HTML的第五次重大修改;2、相关快门键使用如下:   (1)放大缩小视图:放大:Ctrl和+;缩小:Ctrl和-;   (2)向上复制一行:alt+shift+......
  • Unity 从零开始的框架搭建1-1 unity中对象调用的三种方式的优缺点分析【干货】
    该文章专栏是向QFrameWork作者凉鞋老师学习总结得来,吃水不忘打井人,不胜感激Unity框架搭建学习笔记1-1,前一个1代表凉鞋的第一季教程,后一个1代表该季第一篇我的文章 unity中对象调用的三种方式方法调用,例如:A调用B的SayHello方法委托或者回调,例如:界面监听子按钮的点击......
  • 嵌入式通信协议-- I²C 协议篇(IIC)
    目录总述: 1.1主机和从机1.2发送器和接收器1.3总结2.1I²C通信过程第一步:主机发送起始信号:第二步:主机发送从机地址(寻址):第三步:从机应答信号:第四步:发送器发送数据:第五步:接收器发送应答信号:第n步:循环步骤4、5最后一步:主机发送停止信号:3时钟同步4.三种经典时序......
  • 很好也很贵?OpenAI Realtime API 一手体验和 Voice AI 的未来 |播客《编码人声》
       「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 OpenAIRealtimeAPI发布了,你准备好了么? RealtimeAPI让开发者可以构建近乎实时的「语音到语音」的体验,......