C#的元数据和反射

news/2025/2/2 1:01:39/文章来源:https://www.cnblogs.com/cat-cat/p/18584645
反射和new是一个相对的概念
new 是在编译的时候创建一个类的实例对象,这个要提前知道
反射不需要提前知道,反射更适合用在通用模块上

反射:获得类的一些元数据信息

using System;
using System.Reflection;class Program
{static void Main(){Type type = typeof(Person); // 获取类型Console.WriteLine("类名: " + type.Name);Console.WriteLine("命名空间: " + type.Namespace);Console.WriteLine("属性列表:");foreach (PropertyInfo prop in type.GetProperties()){Console.WriteLine(prop.Name + " - " + prop.PropertyType);}}
}public class Person
{public string Name { get; set; }public int Age { get; set; }
}

//输出
类名: Person
命名空间:
属性列表:
Name - System.String
Age - System.Int32

 

//调用实例方法
using System;
using System.Reflection;class Person
{public void SayHello(string name){Console.WriteLine($"Hello, {name}!");}
}class Program
{static void Main(){// 1. 获取类型Type type = typeof(Person);// 2. 创建实例object instance = Activator.CreateInstance(type);// 3. 获取方法信息MethodInfo method = type.GetMethod("SayHello");// 4. 调用方法method.Invoke(instance, new object[] { "Tom" });}
}

 

 

class Utility
{public static void PrintMessage(string message){Console.WriteLine("Message: " + message);}
}class Program
{static void Main(){Type type = typeof(Utility);MethodInfo method = type.GetMethod("PrintMessage");// 调用静态方法,不需要实例method.Invoke(null, new object[] { "Hello, World!" });}
}

 

特性
定义特性
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{public string Description { get; }public MyCustomAttribute(string description){Description = description;}
}
使用特性
[MyCustomAttribute("这是一个测试类")]
public class TestClass
{[MyCustomAttribute("这是一个测试方法")]public void TestMethod() { }
}
读取特性
Type type = typeof(TestClass);
object[] attributes = type.GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attr in attributes)
{Console.WriteLine("特性描述: " + attr.Description);
}特性和反射结合
MethodInfo method = typeof(TestClass).GetMethod("TestMethod");
var attributes = method.GetCustomAttributes(typeof(MyCustomAttribute), false);foreach (MyCustomAttribute attr in attributes)
{Console.WriteLine("方法上的特性描述: " + attr.Description);
}

 


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/877746.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

毕设学习第六天SSM框架之Spring5

虽然目前spring已经出现了6但是现如今大多数应用的还是spring5,因此毕设学习选择Spring5而非6 spring简介Spring 是一个开源的 Java 企业级应用开发框架,旨在简化企业级 Java 应用的开发过程。它通过控制反转(IOC)和面向切面编程(AOP)等核心技术,帮助开发人员构建松耦合…

心态急躁,什么事都做不成

春节这几天,心态有些急躁。也许是突如其来的放松让大脑不适应,最近做事(尤其是打游戏)不顺。 比如体现在炉石酒馆,农,围棋这三者上。这三个是2/1号我从外面回来之后进行的三项娱乐活动。 首先先打了几把炉石,一把速七,两把速八,再加上之前的两把速七速八,让我直接从8…

【风控】风控测试的质效提升之路

# 货拉拉 随着货拉拉业务的迅猛发展,平台每时每刻都面临着黑产的攻击和挑战。为了保障业务安全和稳健地发展,风控作为抗击黑产的前线,负责各项业务的风险识别和阻断工作。同时,各类业务的接入以及风控策略的高强度迭代,也给风控的质量保障和交付效率带来了挑战。如何在保障…

Windows环境变量列表变成老式的横行封号分割PATH路径不方便

前言全局说明win11上环境变量的增、删、改有了专用的列表框,每行一个的环境变量,观察也非常方便。 但有的时候设置完变量,再次打开PATH环境变量,就变成以前win7那样的所有环境变量都在一行,用封号分割了,非常不方便。一、说明 1.1 环境: Windows 11 家庭版 23H2 22631.37…

Spring MVC 初始化

继承关系 DispatcherServlet > FrameworkServlet > HttpServletBean > HttpServlet > GenericServlet > Servlet初始化流程DispatcherServlet 是一个 Servlet,所有的 Servlet 初始化都会执行 init 方法(JAVA EE 的知识,别忘了)HttpServletBean 复写了 init(…

kmp匹配

kmp匹配 代码: #include<bits/stdc++.h> using namespace std; const int N=1e5+6; const int M=1e6+6; char s[M];//长串 char p[N];//模式串 int ne[N];//next指针 ,后退的指针 int main(){int n,m;cin>>n>>p+1>>m>>s+1;//计算ne //ne[1]…

Tokenizer

一、思维导图二、subword(子词)粒度 在很多情况下,既不希望将文本切分成单独的词(太大),也不想将其切分成单个字符(太小),而是希望得到介于词和字符之间的子词单元。这就引入了 subword(子词)粒度的分词方法。本文重点介绍这一部分。 2.1 WordPiece 在BERT时代,Wor…

MyBatis之作用域和生命周期

弄清楚SqlSessionFactoryBuild,SqlSessionFactory,SqlSession的作用域和生命周期,可以避免高并发程序中的资源浪费 具体知识点看狂神的两张ppt就行了

CF856C 题解

很厉害的排列计数0 原题链接:luogu & CF 在任务清单里放了半年,今天终于做出来了 qwq,不得不写题解了。 1 能被 \(11\) 整除的数长什么样子?它的奇数位之和与偶数位之和应当模 \(11\) 同余。 我们不妨把一个数的价值定为从前往后奇数位之和减去偶数位之和模 \(11\) 的值…

人生不止于职业发展

0 你的问题,我知道! 工作意义是啥?职业发展在人生啥角色? 1 工作意义 农村人努力学习考上大学,得好工作,为逃离同村同龄人十几岁就工厂打工命运,过不凡人生,实现改命的唯一途径。毕业就进入自带光环的大厂,有份让所有亲戚羡慕的公司和薪水。我认为工作价值是让自己自立…

『Python底层原理』--CPython如何编译代码

前一篇我们介绍了CPython VM的运行机制,它基于一系列字节码指令来实现程序逻辑。 不过,Python字节码在完整描述代码功能上存在局限性,于是代码对象应运而生。像模块、函数这类代码块的执行,本质上就是对应代码对象的运行,代码对象涵盖了字节码、常量、变量名以及各类属性信…

MyBatis之jdbc属性外部配置

将jdbc数据库连接属性写在db.properties中,如图 然然后在配置文件中引入