理解C#反射

参考文章:http://blog.csdn.net/educast/article/details/2894892

上面的文章将C#反射要用到的方法都给出了,下面我将写个例子,帮助理解

【1.使用反射读取程序集】

复制代码
namespace Ref
{
    class Program
    {
        static void Main(string[] args)
        {
            //读取程序集
            Assembly ass = Assembly.Load("Ref");
            //获取Ref程序集中的Program类
            Type t = ass.GetType("Ref.Program");
            //根据获取到的类创建实例
            object o = Activator.CreateInstance(t);
            //获取方法
            MethodInfo mi = t.GetMethod("Show");
            //反射调用自己的方法(需要传递其类,如果是静态方法则不需要传递o,写成null就行)
            mi.Invoke(o, null);
        }

        public void Show()
        {
            Console.WriteLine("显示22");
        }
    }
}
复制代码

 【2.通过类库DLL文件的反射】

[链接:使用VS制作Dll文件]http://blog.csdn.net/u010026134/article/details/51598499

使用VS的功能,添加新建项目---类库,比如写了以下代码

复制代码
namespace MyDll
{
    public class Class1
    {

    }

    public class SayAndSee
    {
        public string say = "isOk?";

        public void MyFun()
        {
            string see = "isee";
            Console.WriteLine("我看见你了");
        }

        public int Cau(int num1, int num2)
        {
            return num1 + num2;
        }
    }
}
复制代码

然后点击生成---生成解决方法,这样我们就可以在DEBUG目录下获取到这个类的Dll文件了,获取其DLL文件路径

接下来就可以去使用了

复制代码
namespace RefDLL
{
    class Program
    {
        static void Main(string[] args)
        {
            //读取DLL文件
            Assembly assembly = Assembly.LoadFrom(@"C:\Users\zts.FORTUNE\Documents\Visual Studio 2015\Projects\Test3\RefDLL\bin\Debug\MyDll.dll");
            //获取MyDll程序集中的SayAndSee类
            Type t = assembly.GetType("MyDll.SayAndSee");
            //根据获取到的类创建实例
            object o = Activator.CreateInstance(t);
            //获取方法
            MethodInfo mi = t.GetMethod("MyFun");
            //反射调用自己的方法(需要传递其类,如果是静态方法则不需要传递o,写成null就行)
            mi.Invoke(o, null);
        }
    }
}
复制代码

 

posted @   三页菌  阅读(291)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示