C#——反射详情

反射

反射(Reflection)是指程序可以访问、检测和修改它本身状态或行为的一种能力,反射中提供了用来描述程序集、模块和类型的对象,可以使用反射动态地创建类型的实例,并将类型绑定到现有对象,或者从现有对象中获取类型,然后调用其方法或访问其字段和属性。 如果代码中使用了特性,也可以利用反射来访问它们。

反射的用途

* 在运行时查看视图属性信息;

* 检查装配中的各种类型并实例化这些类型;

* 在后期绑定到方法和属性;

* 在运行时创建新类型,然后使用这些类型执行一些任务。

cs 复制代码
  using System;
    
    class MainClass
    {
        public static void Main(string[] args)
        {
            //1.通过对象获取到这个对象所属类的Type对象
            TestClass c = new TestClass();
            Type t = c.GetType();
    
            //2.通过Type类中的静态方法GetType获取到类的Type对象
            //Type t = Type.GetType("TestClass");
    
            //3.通过typeof关键字获取到类的Type对象
            //Type t = typeof(TestClass);
    
            Console.WriteLine(t.Name);//获取类名(不带命名空间)
            Console.WriteLine(t.FullName);//获取类名(带命名空间)
            Console.WriteLine(t.Assembly);//获取程序集
            Console.WriteLine(t.BaseType);//获取基类类型
    
            Console.WriteLine("----------获取类中字段");
            var fields = t.GetFields();
            foreach (var temp in fields)
            {
                Console.WriteLine(temp.Name);
            }
    
            Console.WriteLine("----------获取类中属性");
            var properties = t.GetProperties();
            foreach (var temp in properties)
            {
                Console.WriteLine(temp.Name);
            }
    
            Console.WriteLine("----------获取类中方法");
            var methods = t.GetMethods();
            foreach (var temp in methods)
            {
                Console.WriteLine(temp.Name);
            }
    
            Console.WriteLine("----------获取类中成员");
            var members = t.GetMembers();
            foreach (var temp in members)
            {
                Console.WriteLine(temp.Name);
            }
    
            Console.WriteLine("----------获取类中嵌套类");
            var nesteds = t.GetNestedTypes();
            foreach (var temp in nesteds)
            {
                Console.WriteLine(temp.Name);
            }
    
            Console.WriteLine("----------获取类中构造函数");
            var constructors = t.GetConstructors();
            foreach (var temp in constructors)
            {
                Console.WriteLine(temp.Name);
            }
    
            //获取所有程序集
            var allAssemblies = AppDomain.CurrentDomain.GetAssemblies()
        }
    }
    
    public class TestClass
    {
        public string str;
        public int num { get; set; }
        public void Fun()
        {
    
        }
        public class TestNestedClass
        {
    
        }
    }
相关推荐
液态不合群2 分钟前
理解 C# 中的各类指针
java·开发语言·c#
可喜~可乐10 分钟前
C# SQLite高级功能示例
数据库·sql·sqlite·c#
chenglin01612 分钟前
‌C# 集成 FastDFS 完整指南‌
c#·fastdfs
chenyuhao202414 分钟前
链表的面试题4之合并有序链表
数据结构·链表·面试·c#
水水沝淼㵘1 小时前
嵌入式开发学习日志(数据结构--顺序结构单链表)Day19
linux·服务器·c语言·数据结构·学习·算法·排序算法
愚润求学1 小时前
【Linux】基础 IO(一)
linux·运维·服务器·开发语言·c++·笔记
洛克希德马丁2 小时前
QLineEdit增加点击回显功能
c++·qt·ui
monstercl3 小时前
游戏资源传输服务器
运维·服务器·游戏
网硕互联的小客服3 小时前
服务器配置错误导致SSL/TLS出现安全漏洞,如何进行排查?
运维·服务器
GreatNXY3 小时前
【阿里云】阿里云 Ubuntu 服务器无法更新 systemd(Operation not permitted)的解决方法
服务器·阿里云·云计算