c#  工厂模式  类名 转对象
    方式一:通过类名来生成对象(优势:方便;劣势:不能以递增方式增加需转化成对象的类文件,即每次发布需整个项目重新编译)经测试正确
public class FruitFactory
{
 public IFruit MakeFruit(string Name)
 {
  IFruit MyFruit = null;
  try
  {
   Type type = Type.GetType(Name,true);
   MyFruit = (IFruit)Activator.CreateInstance(type);
  }
  catch (TypeLoadException e)
   Console.WriteLine("I dont know this kind of fruit,exception caught - {0}" ,e.Message);
   return MyFruit;
 }
} 
方式二:通过反射(需提供文件路径,类名;优势:可以以递增文件的方式发布程序;劣势:生成文件麻烦)未测试
/// <summary>
        /// 创建对象(外部程序集)
	        /// </summary>
        /// <param name="path">文件路径</param>
	        /// <param name="typeName">类型名</param>
	        /// <returns>创建的对象,失败返回 null</returns>
	        public static object CreateObject(string path, string typeName)
	        {
	            object obj = null;
	            try
	            {	 
	                obj = Assembly.Load(path).CreateInstance(typeName);
	            }
	            catch (Exception ex)
	            {
	                Debug.Write(ex);
	            }
另外参见:http://blog.hetaoos.com/archives/40
C# 中反射获取某类的子类和根据类型名动态创建对象
2010/10/11 于 23:35 Null 已有 7 条评论
有时候,为了快速批量处理已经实现某个基类或者某个接口的子类,需要通过反射的方式获取到他们的类类型(Type),然后再通过
1	Activator.CreateInstance(objType);
或者
1	Assembly.Load(path).CreateInstance(typeName);
或者
1	Assembly.LoadFile(filePath).CreateInstance(typeName);
创建对象实例。
以下通过一个简单的示例来展示:
1,获取当前程序集中的全部类型;
2,判断某一类型是否是继承与另一类型;
3,根据类型名动态创建对象。
目前还有个疑问,不知道谁能解答:
1,如何判断某个类是否实现了某个接口,目前只能先 new 一个对象,然后再 用 is 判断。
001	using System;
002	using System.Collections.Generic;
003	using System.Text;
004	using System.Reflection;
005	using System.Diagnostics;
006	 
007	namespace com.hetaoos
008	{
009	 
010	    class Test
011	    {
012	        public Test()
013	        {
014	            var types = Assembly.GetExecutingAssembly().GetTypes();
015	            var baseType = typeof(BaseProcessor);
016	            List<BaseProcessor> processors = new List<BaseProcessor>();
017	            foreach (var t in types)
018	            {
019	                var tmp = t.BaseType;
020	                while (tmp != null)
021	                {
022	       &