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
        {
    
        }
    }
相关推荐
Sinclair3 天前
简单几步,安卓手机秒变服务器,安装 CMS 程序
android·服务器
Scout-leaf3 天前
WPF新手村教程(三)—— 路由事件
c#·wpf
用户298698530144 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版
后端·c#·.net
Rockbean4 天前
用40行代码搭建自己的无服务器OCR
服务器·python·deepseek
茶杯梦轩5 天前
CompletableFuture 在 项目实战 中 创建异步任务 的核心优势及使用场景
服务器·后端·面试
mudtools5 天前
搭建一套.net下能落地的飞书考勤系统
后端·c#·.net
玩泥巴的5 天前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21885 天前
.NET 本地Db数据库-技术方案选型
windows·c#
海天鹰5 天前
【免费】PHP主机=域名+解析+主机
服务器
lindexi5 天前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice