C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry

本文主要是介绍C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
  • 反射是什么?
  • 常用类型操作
    • Summry
    • PropertyInfo
    • MethodInfo
      • 无参函数运行
    • 有参函数运行,获取paramterInfo
  • 总结

前言

我之前写了一篇Attribute特性的介绍,成功拿到了Attribute的属性,但是如果把Attribute玩的溜,那就要彻底了解反射。

C#高级语法 Attribute特性详解和类型,方法,变量附加特性讲解

反射是什么?

反射就是对一个类里面所有的元素的彻底描述。我们可以从特性看出C# 对基于反射的类型定义了。

【C#进阶】C# 特性

在这里插入图片描述

我们声明一个简单的类


namespace NETCore8.Models
{public class TestModel{public int Id { get; set; }private string name;public void Send(){}/// <summary>/// 发送测试/// </summary>/// <param name="name"></param>public void TestSend(string name){}public TestModel(){}}
}

在这里插入图片描述

常用类型操作

我们接下来的操作全部都是基于共有属性进行的操作

Summry

但是Summry不属于编译内容,属于注解,如果想要获取Summry信息,则需要安装一个Nuget:Namotion.Refelction

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PropertyInfo

       static void Main(string[] args){//声明一个简单的bindingFlagsBindingFlags bindingFlags = BindingFlags.Public | BindingFlags.Instance;TestModel model = new TestModel();model.Id = 5;var propertyInfo =  model.GetType().GetProperty("Id");Console.WriteLine("属性名:"+ propertyInfo?.Name);Console.WriteLine("属性值:" + propertyInfo?.GetValue(model));Console.WriteLine("属性类型:" + propertyInfo?.PropertyType);propertyInfo.SetValue(model, 10);Console.WriteLine("修改后的属性值:" + propertyInfo.GetValue(model));//如果你安装了Namotion.Refelction,可以使用封装好的扩展方法Console.WriteLine("Namotion.Refelction:" + model.TryGetPropertyValue<int>("Id"));Console.WriteLine("Hello, World!");Console.ReadKey();}

在这里插入图片描述

MethodInfo

无参函数运行

在这里插入图片描述

        static void Main(string[] args){TestModel model = new TestModel();var methodInfo = model.GetType().GetMethod("Send");if (methodInfo != null){Console.WriteLine($"方法名:{methodInfo.Name}");Console.WriteLine($"返回值:{methodInfo.ReturnType}");Console.WriteLine("运行方法");methodInfo.Invoke( model, null );}Console.WriteLine("Hello, World!");Console.ReadKey();}

在这里插入图片描述

有参函数运行,获取paramterInfo

在这里插入图片描述

internal class Program
{static void Main(string[] args){TestModel model = new TestModel();var methodInfo = model.GetType().GetMethod("TestSend");//如果你装了Namotion.Refelction,可以使用Xml方法获取注解if (methodInfo!= null ){Console.WriteLine($"方法名:{methodInfo.Name}");Console.WriteLine($"返回值:{methodInfo.ReturnType}");Console.WriteLine($"方法注解:{methodInfo.GetXmlDocsSummary()}");var parmeters = methodInfo.GetParameters();foreach (var item in parmeters){Console.WriteLine($"参数名:{item.Name}");Console.WriteLine($"参数类型:{item.ParameterType}");Console.WriteLine($"参数注解:{item.GetXmlDocs()}");}Console.WriteLine("运行方法,注意无法解决重载问题,因为重载的方法名相同,会直接抛出异常");Console.WriteLine("运行方法的参数类型和个数必须完全一致");methodInfo.Invoke(model, new object[] { "入参",1 });}Console.WriteLine("Hello, World!");Console.ReadKey();}
}

在这里插入图片描述

总结

我们将反射类型的常用内容已经讲解完了。接下来我们将主要讲解Attribute的详细运用。经过这么久的铺垫,我们终于可以开始正常的讲解了。

这篇关于C# 反射的终点:Type,MethodInfo,PropertyInfo,ParameterInfo,Summry的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/571648

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

C# dateTimePicker 显示年月日,时分秒

dateTimePicker默认只显示日期,如果需要显示年月日,时分秒,只需要以下两步: 1.dateTimePicker1.Format = DateTimePickerFormat.Time 2.dateTimePicker1.CustomFormat = yyyy-MM-dd HH:mm:ss Tips:  a. dateTimePicker1.ShowUpDown = t

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

C# Hash算法之MD5、SHA

MD5我们用的还是比较多的,一般用来加密存储密码。但是现在很多人觉MD5可能不太安全了,所以都用上了SHA256等来做加密(虽然我觉得都差不多,MD5还是能玩)。 还是跟上一篇说的一样,当一个算法的复杂度提高的同时肯定会带来效率的降低,所以SHA和MD5比较起来的话,SHA更安全,MD5更高效。 由于HASH算法的不可逆性,所以我认为MD5和SHA主要还是应用在字符串的"加密"上。 由于

【反射知识点详解】

Java中的反射(Reflection)是一个非常强大的机制,它允许程序在运行时检查或修改类的行为。这种能力主要通过java.lang.reflect包中的类和接口来实现。 通过反射,Java程序可以动态地创建对象、调用方法、访问字段,以及获取类的各种信息(如构造器、方法、字段等)。 反射的用途 反射主要用于以下几种情况: 动态创建对象:通过类的Class对象动态地创建其实例。访问类的字段