C# 关于反射的简单示例

写在前面

在日常开发中,我们经常使用反射来动态获取关于类的信息,或者是动态给类实例成员赋值;反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。

代码实现

cs 复制代码
using System.Reflection;

class ReflectionDemo
{

    static void Main(string[] args)
    {

        Assembly myAssembly = Assembly.Load("ReflectionDemo");

        var types = myAssembly.GetTypes();//获取类型
        foreach (Type type in types)//针对每个类型获取详细信息
        {
            if (type.Name != "MyClass") continue;

            Console.WriteLine($"type name:{type.Name}");
            Console.WriteLine($"is interface:{type.IsInterface}"); 

            //获取类型的结构信息
            var myConstructors = type.GetConstructors();
            Console.WriteLine($"constructor count: {myConstructors.Length}");

            //获取类型的字段信息
            var myFields = type.GetFields();
            Console.WriteLine($"field count: {myFields.Length}");

            //获取方法信息
            var myMethodInfo = type.GetMethods();
            Console.WriteLine($"method count: {myMethodInfo.Length}");

            //获取属性信息
            var myProperties = type.GetProperties();
            Console.WriteLine($"property count: {myProperties.Length}");

            //获取事件信息
            var myEvents = type.GetEvents();
            Console.WriteLine($"event count: {myEvents.Length}");
        }
 
        var myClass = myAssembly.CreateInstance("MyClass", true, BindingFlags.Default, null, new object[] { "test" }, null, null);
        if (myClass != null)
        {
            var myClassType = myClass.GetType();
            var ageProp = myClassType.GetProperty("Age");
            ageProp.SetValue(myClass, 100);
            Console.WriteLine($"Age is:{((MyClass)myClass).Age }");
        }

        Console.ReadLine();
    }

}

public class MyClass
{

    public int Type = 0;

    public MyClass()
    {

    }

    public MyClass(string name)
    {
        Name = name;
    }

    public delegate void HandleEvent(string eventName);

    public event HandleEvent MyEvent;

    public int Id { get; set; }

    public string Name { get; set; }

    public int Age { get; set; }

    public int GetAge()
    {
        return Age;
    }

    public string GetFullName()
    {
        return $"MyClass.{Name}";
    }


}

调用示例

相关推荐
t***5443 小时前
如何配置Orwell Dev-C++使用Clang
开发语言·c++
CoderCodingNo3 小时前
【信奥业余科普】C++ 的奇妙之旅 | 13:为什么 0.1+0.2≠0.3?——解密“爆int”溢出与浮点数精度的底层原理
开发语言·c++
kongba0074 小时前
项目打包 Python Flask 项目发布与打包专家 提示词V1.0
开发语言·python·flask
froginwe115 小时前
C 语言测验
开发语言
今夕资源网5 小时前
powershell工具包 安装升级脚本并设置UTF-8 环境快捷方式创建 将powershell的编码默认改为UTF-8
开发语言·utf-8·powershell·utf-8编码·powershell7·powershell5·设置utf-8编码
机器视觉知识推荐、就业指导5 小时前
Qt:真正的门槛不是入门,而是维护
开发语言·qt
hhb_6186 小时前
Dylan 语言核心特性与工程实践深度解析
开发语言·c#
无巧不成书02186 小时前
零基础Java网络编程全解:从核心概念到Socket实战,一文打通Java网络通信
java·开发语言·网络
饭小猿人6 小时前
Flutter实现底部动画弹窗有两种方式
开发语言·前端·flutter
aq55356006 小时前
Workstation神技:一键克隆调试环境
java·开发语言