反射的用法之二

1.采用配置文件使用反射

2. 配置文件 App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <appSettings>

    <!--<add key="IHelpConfig" value="Com.Meteor.Dal,Com.Meteor.Dal.SqlserverHelper"/>-->
    <add key="IHelpConfig" value="Com.Meteor.MySql,Com.Meteor.MySql.MysqlHelper"/>

  </appSettings>
</configuration>

3.反射举例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Com.Meteor.Interface;
using System.Configuration;

namespace MyReflection
{
    /// <summary>
    /// metadata元数据
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("欢迎大家来流星小子博客,学习反射技术");

          //  SqlserverHelper sqlserverHelper = new SqlserverHelper();
          //  sqlserverHelper.Query();
           Console.WriteLine("-----------可配置可扩展--------------");
           string iHelperConfig = ConfigurationManager.AppSettings["IHelpConfig"];
           Assembly assembly = Assembly.Load(iHelperConfig.Split(‘,‘)[0]);//动态加载dll
           Type typeHelper = assembly.GetType(iHelperConfig.Split(‘,‘)[1]);
           Object oHelper = Activator.CreateInstance(typeHelper);
           IHelper iHelper = (IHelper)oHelper; //这句有性能损失,使用了强制类型转换
           iHelper.Query();
           Console.Read();

        }
    }
}
namespace Com.Meteor.Interface
{
    public interface IHelper
    {
        void Query();
    }
}

namespace Com.Meteor.Dal
{
    public class SqlserverHelper : IHelper
    {
        public SqlserverHelper()
        {
            Console.WriteLine("这里开始构造SqlserverHelper");
        }
        public void Query()
        {
            Console.WriteLine("SqlserverHelper Query");
        }
    }
}
public class MysqlHelper : IHelper
    {
        public MysqlHelper()
        {
            Console.WriteLine("这里开始构造MysqlHelper");
        }
        public void Query()
        {
            Console.WriteLine("MysqlHelper Query");
        }
    }

代码下载路径:https://i.cnblogs.com/Files.aspx

时间: 2024-10-18 03:09:28

反射的用法之二的相关文章

Unity3d 4.0新动画系统Mecanim用法(二)

上一篇,我们初步了解了一下Mecanim的部分很基础的类容,我以一个疑问的形式结尾.这次我来揭晓此问题的答案,其实很简单,上次的警告如下: 4.0新动画系统Mecanim用法(二)"> 警告的大概意思是:用在Animator Controller中的Animation clips需要有在检视面板中被设置了Muscle(肌肉)的这个步骤. 我的英文很烂,但我可以知道这句话的含义,就是我们的用到的这个Animation Clip必须是已经产生了Avatar的模型中的Animation Clip

awk用法(二)

awk用法(二) 知识点一: 条件操作符,可以进行逻辑判断,举个栗子: #awk -F ':' '$1=="daemon"' 1.txt[daemon的双引号必须要加!] 知识点二: #awk -F ':' '$1=="root" || $6~'/sbin/'' 1.txt 其中,||表示或者,上述命令表达的内容是:打印出第一段是root的,或者第六段包含sbin的行. 知识点三: #awk -F ':' '$1=="root" &&am

c# 反射简单用法例子

闲来无事,看了下反射的实现,写了个小例子. 新建一个类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WfmReflection { class MyClass { public string m; public void test() { } public int MyProperty { get; set; } } } 建一个类库 using S

JavaBean基本用法示例(二)

JavaBean的第二种用法,是接收form组件的请求赋值. 一.修改person类.因为这一次是两个网页之间的数据传输,受中文乱码问题的影响,所以在person类中添加一个用于转码的函数,并且在每一个String类型的set方法中调用.这样才可以确保最后的中文显示正常. 1 package com.kaly.bean; 2 3 import java.io.UnsupportedEncodingException; 4 5 public class person { 6 String name

Oracle分析函数用法(二)

Oracle分析函数--函数用法 Oracle分析函数实际上操作对象是查询出的数据集,也就是说不需二次查询数据库,实际上就是oracle实现了一些我们自身需要编码实现的统计功能,对于简化开发工作量有很大的帮助,特别在开发第三方报表软件时是非常有帮助的.Oracle从8.1.6开始提供分析函数. oracle分析函数的语法: function_name(arg1,arg2,...) over (<partition-clause> <order-by-clause ><wind

单例模式防反射及性能(二)

单例模式的目的是创建一个对象,但是反射的方式,或者使用反序列的方式,就会对这种目的造成威胁,那么我们先来看看如何使用反射,如何使用反序列化,创建构造函数私有化的对象,以及我们如何防止反序列化创建对象. 1.补充:如何选用单例模式 (1)占用资源少,不需要延迟加载的,一般使用的是枚举和饿汉式,但是枚举比饿汉式安全. (2)占用资源大,需要延迟加载,一般使用静态内部类和懒汉式,静态内部类好于懒汉式,因为他更加的懒汉式.线程安全.调用的效率高. 2.使用反射破解的时候,一般是不包括枚举的,所以他的安全

java反射的用法

反射(运行时的类信息),在java里面得到了大量的使用,尤其是在一些框架里面(注解等等),多多少少都会用到反射,了解java的反射,对我们以后学习框架和写框架都会起到非常的重要! Class类与java.lang.reflect类库一起对反射的概念进行了支持,该类库包括了FieId.Method以及Constructor类.这些类型的对象是由JVM在运行时创建的,用以表示未知类里对应的成员.这样你就可以使用Constructor创建新的对象,用get()和set()方法读取和修改与FieId对象

7.21总结——反射的用法

今天一天就讲了一个反射,其实反射本身很简单,只是运用起来相对复杂: 先说说反射是干嘛的吧!反射的强大之处就在于他可以通过.class的文件,调用原生Java文件中的任何属性,方法,不管是私有还是公共的. 注意:反射调用的类一定要有一个无参的构造器 现在介绍一下获取反射模板的三种方式: 1)类名.class eg:Class clazz1=Reflect01.class; 2)先new对象,在用对象.getClass获取 eg:Reflect01 reflecto1=new Reflect01()

在C++中反射调用.NET(二)

反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET程序集的简单方法,今天我们看看如何在C++与.NET程序集之间传递复杂对象. 先看看.NET程序集的一个返回对象的方法: public IUserInfo GetUserByID(int userId) { IUserInfo userinfo= EntityBuilder.CreateEntity<IUserInfo>(); user