博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c#中,利用反射机制的两个示例

Posted on 2010-11-10 12:34  gczhao  阅读(352)  评论(0编辑  收藏  举报

本文转自:http://renhappy20066.blog.163.com/blog/static/1120807862010220104129204/

 

示例一.

利用反射机制获取当前的程序集

首先,引入命名空间using System.Reflection;
在测试类中进行测试,示例代码如下:
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //得到当前程序集
            Assembly assembly = Assembly.GetExecutingAssembly();
            //Console.WriteLine(assembly.GetName().ToString());
            //获得所有的类信息
            foreach (MemberInfo info in assembly.GetTypes())
            {
                Console.WriteLine(info.ToString());
                Console.ReadKey();
            }

        }
    }
}


示例二.

利用反射机制动态的加载不同类型的数据库

分别以SQL Server和Oracle为例
首先,引入两个命名空间,using System.Reflection;和using System.Configuration;(配置文件的命名空间


其次,创建User.cs
    示例代码:
      
    public class User
    {
        int _id;

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
        string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
    }
    创建SQL Server的实现类(只是模拟实现,数据库连接并无真正实现,主要是用来演示反射机制的)
    SqlService.cs

    示例代码:
    public class SqlService
    {
        public static int InserUser(User user)
        {
            return 1;
        }
    }
 
    创建Oracle的实现类
    Oracle.cs

    示例代码:
    class OracleService
    {
        public static int InserUser(User user)
        {
            return 0;
        }
    }

    创建数据库选择类(用来实现动态的选择数据库):
    ChooseDB.cs

    示例代码:
    class ChooseDB
    {
        public static int ChooseService()
        {
            int result = 0;
            string type =
                ConfigurationManager.AppSettings["type"];
            User user=new User();
            switch (type)
            {
                case "Sql":
                    result= SqlService.InserUser(user);
                    break;
                case"Oracle":
                    result=AccessService.InserUser(user);
                    break;
            }
            return result;
        }
    }

接着,配置App.config文件
示例代码:
App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="type" value="Oracle"/>
  </appSettings>
</configuration>

最后,在主程序中进行测试,
示例代码:
class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(ChooseDB.ChooseService().ToString());
            Console.ReadKey();
        }
    }  

此示例主要是为了演示c#中的反射机制,只需修改App.config文件中的value的值,而在选择数据库类之中,将

键(key)传给该类,即可动态的为应用程序选择不同的数据库。
 
此示例在实际开发中应用比较多,所以应该进行深入的学习。