反射程序集

         通过Type,我们可以对任何类型进行反射读取,同样,也可以把读取的对象的范围扩大。

      一,关于程序集

              在.net中,程序集是进行部署,版本控制的基本单元;

              System.reflection命名空间下的Assembly类型,代表了一个程序集,并包含了关于程序集的信息。

             获取assembly对象的方法:

                  loadForm 参数:程序集的文件名称(如果加载一个不属于当前项目的程序集,则要写上全名)

                  Load  参数:提供程序集名称即可,而非文件名称。

 

    二,反射程序集示例

              首先,我们建立如下结构解决方案:

              

            然后在Test类库中的class1里面添加如下测试内容:

             

namespace Test
{
    public abstract class BaseClass { }

    public struct DemoStruct { }

    public delegate void DemoDelegate(Object sender,EventArgs e);

    public enum DemoEnum { terrible,bad,common=4,good,wonderful=8}

    public interface IDemoInterface {

        void SayGreeting(string name);

    }

    public interface IdemoInterface2 { }

    public sealed class DemoClass : BaseClass, IDemoInterface, IdemoInterface2 {

        private string name;
        private string city;
        public  readonly string title;
        public const string text = "const field";
        public event DemoDelegate myEvent;

        public string Name {

            private get { return name; }
            set { name = value; }

        }

        public DemoClass() {

            title = "Readonly field";

        }

        public class NestedClass { }

        public void SayGreeting(string name)
        {

            Console.WriteLine("morning:"+name);
        }

    }
}

       接着,我们就使用Assembly来获取程序集:

 

  

namespace 反射程序集
{
    class Program
    {
        static void Main(string[] args)
        {
            AssemblyExplore();

        }

        //查看Test程序集中的全部类型
        public static void AssemblyExplore() {

            StringBuilder sb = new StringBuilder();

            Assembly asm = Assembly.Load("Test");  //加载Test
            sb.AppendLine("全名:"+asm.FullName); //输出全名
            sb.AppendLine("路径:"+asm.Location);//输出路径

            Module[] modules = asm.GetModules();  //获取程序集中所有模块
            foreach (Module model in modules )   //遍历模块数组
            {
                sb.AppendLine("模块:"+model);
                Type[] types = model.GetTypes();  //得到模块里面的各种类,接口啥的。。。
                foreach (Type t in types)
                {
                    sb.AppendLine("  类型:"+t);   //看看啥类型滴。。。。
                }

            }

            Console.WriteLine(sb.ToString());

        }
    }

}

     查看我们运行结果:         

     

          

    

          真的好神奇呀~~~等等,是不是想起以前设计模式中读取配置文件,然后反射加载D层了呢?

            

时间: 2024-10-06 11:40:29

反射程序集的相关文章

反射 程序集-成功添加程序集到缓存中 但assmbly找不到该文件

问题描述 成功添加程序集到缓存中 但assmbly找不到该文件 成功将DLL添加到程序集中了.但是C:Windowsassembly目录下找不到该DLL

C#使用反射加载多个程序集的实现方法_C 语言

当开发插件的时候需要用到反射,在客户端动态加载遍历程序集,并调用每个程序集的方法. 创建一个控制台应用程序,首先设计一个接口: public interface ISay { void SaySth(); } 在控制台应用程序下创建Plugins文件夹,控制台的可执行文件和所有程序集文件都生成在这里.右键控制台项目--"属性"--"生成",把"输出路径"设置成Plugins文件夹. 创建类库项目Assembly1,添加对控制台项目的引用,并创建实

技术求救:利用"反射"将含窗体的Dll嵌入到新创建的tabPage中

问题描述 关键字:C#winform插件集动态调用DlltabPage各位论坛大哥,小弟是刚入门不久,现有一个程序问题帮忙看下怎么解决,如果能附上实例,不胜感激!设计思路如下:通过插件机制通过接口方式,动态调用放在plugins路径下已编译好的Dll,利用"反射"将含窗体的Dll嵌入到新创建的tabPage中.问题如下:目前插件框架已搭建,可将程序集内的窗体反射到新创建的tabPage中,但无法利用"反射"将含窗体的Dll嵌入到新创建的tabPage中.#regio

异步调用Web服务方法

基于Ajax技术构建的门户是web 2.0这一代中最为成功的Web应用程序.而这块市场上iGoogle和Pageflakes这两大站点已经走在了时代的前列. 当你打开Pageflakes,将会看到如下的界面: 接下来就是界面上的各个"部件"去向服务器请求各种web服务,而服务器作为代理,则代为向外部web服务发出请求.(这是因为ajax调用无法跨越,所以常通过代理来请求数据) 问题场景:某个很受用户欢迎的"部件"很长时间不能执行,导致很对请求无法及时执行,引起请求失

asp.net面试题收集

asp.net 1.new有几种用法 第一种:new Class(); 第二种:覆盖方法 public new XXXX(){} 第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数. 2.如何把一个array复制到arrayList里 foreach( object o in array )arrayList.Add(o); 3.datagrid.datasouse可以连接什么数据源 [dataset,datatable,dataview] dataset,datat

让用户通过宏和插件向您的 .NET 应用程序添加功能

程序 Jason Clark 本文假设您熟悉 .NET 与 C# 下载本文的代码: Plug-Ins.exe (135KB) 概述 大多数用户应用程序都受益于可由其他开发人员扩展的能力. 扩展一个用户已经很熟悉并针对它进行过培训的现有应用程序往往比从头开发来得简单和有效.因此,可扩展性会使您的应用程序更加吸引人. 您可以通过支持插件和宏等功能来使应用程序具有可扩展性. 使用 .NET Framework 可以轻松实现这一点,即使核心应用程序不是 .NET Framework 应用程序. 在本文中

.net面试题大全(有答案)

1 (1)面向对象的语言具有__继承性_性._封装性_性._多态性 性. (2)能用foreach遍历访问的对象需要实现 _ IEnumerable 接口或声明_ GetEnumerator 方法的类型.1.c#中的三元运算符是__?:__ 2.当整数a赋值给一个object对象时,整数a将会被__装箱___? 3.类成员有__3__种可访问形式? 4.public static const int A=1;这段代码有错误么?是什么? const成员都是static所以应该去掉static 5.

.NET平台开源项目速览(4).NET文档生成工具ADB及使用

原文:.NET平台开源项目速览(4).NET文档生成工具ADB及使用     很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧.例如本文在: .NET平台开源项目速览(2)Compare .NET Objects对象比较组件 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB 上述2篇文章中最后的资源中就手动制作了CHM帮助

[置顶].NET平台开源项目速览(4).NET文档生成工具ADB及使用

    很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧.例如本文在: .NET平台开源项目速览(2)Compare .NET Objects对象比较组件 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB 上述2篇文章中最后的资源中就手动制作了CHM帮助文档.有时候我们还可以对源码进行翻译,再制作,效果还不错.今天介绍的A