`
yizhyi
  • 浏览: 61713 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

用反射调用任意.net库中的方法

    博客分类:
  • .net
阅读更多
注:
1、ReturnMessage 是我自写的一个类,作用请查看我的其他文章,我也把这个类一并附在后面
2、通过NameSpaceAndClassName和MethodName实际上就可以精确定位一个方法了如调用abc.dll里的namespace1.Class1.Main,调用起来就是CallAssembly("abc.dll","namespace1.Class1","Main",null)
 
public static ReturnMessage CallAssembly(string Path,string NameSpaceAndClassName,string MethodName,object[] Parameters)
        {
            try
            {
                Assembly Ass=Assembly.LoadFrom(Path);//调入文件(不限于dll,exe亦可,只要是.net)
                Type TP=Ass.GetType(NameSpaceAndClassName);//NameSpaceAndClassName是"名字空间.类名",如"namespace1.Class1"
                MethodInfo MI=TP.GetMethod(MethodName);//MethodName是要调用的方法名,如"Main"
                object MeObj=System.Activator.CreateInstance(TP);
                MI.Invoke(MeObj,Parameters);//Parameters是调用目标方法时传入的参数列表
                return new ReturnMessage(true,"成功调用",1);
            }
            catch(Exception e)
            {
                return new ReturnMessage(false,"出现异常,消息为:"+e.Message,-1,e);
            }
        }
 
附ReturnMessage
public class ReturnMessage
    {
        public ReturnMessage()
        {
            this.m_Succeed=false;
            this.m_Message="";
            this.m_Code=-1000;
            this.m_Data=null;
        }
        public ReturnMessage(bool IsSucceed)
        {
            this.m_Succeed=IsSucceed;
        }
        public ReturnMessage(bool IsSucceed,string Message)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
        }
        public ReturnMessage(bool IsSucceed,string Message,int Code)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
            this.m_Code=Code;
        }
        public ReturnMessage(bool IsSucceed,string Message,int Code,object Data)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
            this.m_Code=Code;
            this.m_Data=Data;
        }
        public ReturnMessage(bool IsSucceed,string Message,int Code,object Data,object[] Datas)
        {
            this.m_Succeed=IsSucceed;
            this.m_Message=Message;
            this.m_Code=Code;
            this.m_Data=Data;
            this.m_Datas=Datas;
        }
        //
        bool m_Succeed;
        string m_Message;
        int m_Code;
        object m_Data;
        object[] m_Datas;
        public bool Succeed
        {
            get{return m_Succeed;}
            set{m_Succeed=value;}
        }
        public string Message
        {
            get{return m_Message;}
            set{m_Message=value;}
        }
        public int Code
        {
            get{return m_Code;}
            set{m_Code=value;}
        }
        public object Data
        {
            get{return m_Data;}
            set{m_Data=value;}
        }
        public object[] Datas
        {
            get{return m_Datas;}
            set{m_Datas=value;}
        }
    }

分享到:
评论

相关推荐

    .NET中的反射机制

    .NET框架中的反射机制是开发过程中一个非常重要的工具,它允许程序在运行时动态地获取类型信息并操作类型实例。反射提供了强大的能力,如创建对象、调用方法、访问字段和属性,以及处理委托和事件。以下是对.NET反射...

    reflector .NET反射机制

    2. 动态方法调用:通过MethodInfo的Invoke方法,可以在运行时调用任意对象的方法。 3. 访问私有成员:通过适当的BindingFlags,反射允许访问通常不可见的私有成员。 4. 扩展性:反射为插件架构和动态编程提供了基础...

    .net反射机制的框架(性能很OK)

    .NET反射机制是.NET框架中的一个强大工具,它允许在运行时检查、操作和动态创建类型。这个框架在处理元数据和动态代码执行方面表现出色,正如标题所提及的,其性能相当OK,即使运行100000次也只需要100多毫秒,这在...

    .net 反射工具

    2. 动态调用方法:MethodBase类提供了Invoke方法,可以用于在运行时调用对象的任意方法。 3. 访问字段和属性:FieldInfo和PropertyInfo类分别用于获取和操作类的字段和属性。 4. 查找并执行特定的程序集、类型、接口...

    VB.Net的练习

    在这个VB.Net的练习中,可能包含了使用反射技术实现的示例,比如动态加载和执行程序集,或者根据运行时环境调整程序行为。这样的实践可以帮助开发者更好地理解和掌握反射的实际应用。 最后,提到的“字体”标签可能...

    C__.NET_反射、委托技术与设计模式

    - **方法调用**:通过`MethodInfo`类可以调用任意类型的方法,无论它们的访问级别如何。 - **属性访问**:使用`PropertyInfo`可以读取和设置属性的值。 - **事件处理**:`EventInfo`可用于添加或移除事件处理程序。 ...

    VB.NET中高级篇

    5. 反射:反射允许程序在运行时动态地获取类型信息,并能创建对象、调用方法、访问属性。这对于实现元编程和动态加载组件非常有用。 6. LINQ(Language Integrated Query):LINQ是VB.NET中的一种强大的查询语言,...

    09年.NET Framework 题库

    题目询问如何使用反射来确定一个方法是否可以在派生类中访问。正确答案是选项D,即访问`MethodInfo`的`IsFamily`属性。`IsFamily`属性返回一个布尔值,表示该方法是否具有`protected`访问修饰符,这意味着派生类可以...

    在linq查询中使用反射

    使用`Expression`类,你可以构建表示反射调用的表达式树。例如,`Expression.Call(null, typeof(YourType).GetMethod("YourMethod"))`将创建一个表示调用静态方法`YourMethod`的表达式。 3. 构建LINQ查询:接下来,...

    OpenGL建模技术在VC.NET环境下的实现方法研究

    本文探讨了在VC++.NET环境下使用OpenGL进行三维物体建模的方法。OpenGL是一种跨平台的API,广泛应用于计算机图形学领域,特别适用于创建高质量的三维图形。通过结合VC++.NET的强大功能,研究人员可以有效地构建复杂...

    .NET面试常见问题

    调用WebService在.NET中可以通过以下几种方法: - **使用WSDL.exe命令行工具**:此工具可以生成用于调用Web服务的代理类。 - **使用Visual Studio中的Add Web Reference菜单选项**:这是一种图形化方式,通过添加...

    .net学习心得.doc

    反射允许我们动态地创建对象、调用方法、访问属性和字段,甚至发现并执行类型所包含的任意成员。本文将详细解释反射的工作原理,并通过一个具体的示例来展示其在实际编程中的应用。 反射的核心在于`System....

    c# 反射多线程

    在某些情况下,可能需要在一个独立的线程中通过反射调用某个方法。例如,可以通过反射动态创建并启动一个新的线程来执行某个方法。 **3.3 示例代码** ```csharp using System; using System.Threading; using ...

    C#动态加载DLL主要说明如何通过反射实现动态加载DLL

    这种方法允许我们传递参数,实现对动态加载的类的任意方法调用。 注意以下几点关键知识点: 1. `MarshalByRefObject`:为了让对象能在不同的`AppDomain`间通信,必须继承此类。它表示对象的所有操作都在创建它的`...

    C#实现反射实例和软件

    在编程领域,C#是一种广泛使用的面向对象的编程...在实践中,虽然反射能解决很多难题,但应谨慎使用,因为过度使用反射可能会影响性能,增加代码复杂性,且不易于维护。在设计系统时,需要权衡其带来的便利和潜在问题。

    C#VBDelphi反射工具看源代码了

    在IT行业中,反射是一种强大的编程概念,它允许运行时的程序获取关于自身类型的信息,并能够动态地调用方法、创建对象、改变字段值等。在.NET框架中,C#、VB.NET以及Delphi(通过其.NET版本)都支持反射机制。本篇...

    C#,.Net软件工程师面试题

    - C# 中不直接使用 `finalize` 方法,而是通过析构函数调用基类的 `Finalize()` 方法来协助垃圾回收机制。 #### 8. Error 与 Exception 的区别 - **Error**:表示严重错误,通常难以恢复。 - **Exception**:表示...

    .NET/C#如何使用反射注册事件详解

    在.NET框架中,反射是一种强大的机制,它允许程序在运行时动态地访问、检测和修改程序集中的类型(包括类、结构、委托、接口和枚举等)。通过反射,可以获取到对象的类型信息,包括其成员(方法、属性、事件)的名称...

    反射和自定义特性DEMO

    在.NET框架中,反射是一种强大的工具,它允许程序在运行时检查自身并执行与类型相关的操作。自定义特性则是提供了一种元数据的方式,让开发者能够向代码添加额外的信息,这些信息可以在运行时通过反射机制获取。下面...

Global site tag (gtag.js) - Google Analytics