zoukankan      html  css  js  c++  java
  • 反射簡單應用例子[轉]

    什么是Assembly(程序集)?
    Assembly是一个包含来程序的名称,版本号,自我描述,文件关联关系和文件位置等信息的一个集合。在.net框架中通过Assembly类来支持,该类位于System.Reflection下,物理位置位于:mscorlib.dll。

    Assembly能干什么?
    我们可以通过Assembly的信息来获取程序的类,实例等编程需要用到的信息。

    一个简单的演示实例:
    1.建立一个Console工程名为:NamespaceRef
    2.写入如下代码:

    2using System.Collections.Generic;
    3using System.Text;
    4using System.Reflection;
    5
    6namespace NamespaceRef
    7{
    8    class Program
    9    {
    10        static void Main(string[] args)
    11        {
    12             Country cy;
    13             String assemblyName = @"NamespaceRef";
    14            string strongClassName = @"NamespaceRef.China";
    15            // 注意:这里类名必须为强类名
    16            // assemblyName可以通过工程的AssemblyInfo.cs中找到
    17             cy = (Country)Assembly.Load(assemblyName).CreateInstance(strongClassName);
    18             Console.WriteLine(cy.name);
    19             Console.ReadKey();
    20         }
    21     }
    22
    23    class Country
    24    {
    25        public string name;
    26     }
    27
    28    class Chinese : Country
    29    {
    30        public Chinese()
    31        {
    32             name = "你好";
    33         }
    34     }
    35
    36    class America : Country
    37    {
    38        public America()
    39        {
    40             name = "Hello";
    41         }
    42     }
    43}


    由于Assembly的存在给我们在实现设计模式上有了一个更好的选择。
    我们在开发的时候有时候会遇到这样的一个问题,根据对应的名称来创建指定的对象。如:给出chinese就要创建一个chinese对象,以前我们只能这样来写代码:

    = new China();
    3else if (strongClassName == "America")
    4     cy = new America();

    那么如果我们有很长的一系列对象要创建,这样的代码维护起来是很困难的,而且也不容易阅读。现在我们可以通过在外部文件定义类的程序集名称和类的强名称来获得这样一个实例,即易于理解,又增强了扩展性还不用修改代码。
    cy = (Country)Assembly.Load(assemblyName).CreateInstance(strongClassName);

    结论
    Assembly类有很多的方法和属性,它和Type一样有很多功能用于名称与方法和属性之间的转化。深入理解这两个类,你就可以清晰通用语言层是如何工作。

    http://www.cnblogs.com/muou/archive/2009/07/08/1518971.html

  • 相关阅读:
    给定一个十进制数M,以及需要转换的进制数N。 将十进制数M转化为N进制数
    java计算两条线段交点
    输入两个整数n和m,从数列1,2,3,……n中随意取几个数,使其和等于m 转载
    全排列 (递归求解+字典序) java 转载
    四大线程池详解(转载)
    生产者消费者简单实现(转载)
    进程 线程通信方式(转载)
    匿名对象和类名为数据类型(java)
    星星(java)
    杨辉三角(java)
  • 原文地址:https://www.cnblogs.com/sdya/p/5260783.html
Copyright © 2011-2022 走看看