日期:2014-05-18  浏览次数:21007 次

C#反射问题:未能从程序集“……”中加载类型“……”
以下为我的实现代码:
C# code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
{

    public interface ICar
    {
        void Say();
    }


    public class Bus : ICar
    {
        public void Say()
        {
            Console.WriteLine("I am a Bus");
        }
    }

    public class Truck : ICar
    {
        public void Say()
        {
            Console.WriteLine("I am a Truck");
        }
    }


    public class CarFactory
    {
        public static ICar BuildCar(string name)
        {
            ICar myCar = null;
            try
            {
                Type type = Type.GetType(name, true);
                myCar = (ICar)Activator.CreateInstance(type);
            }
            catch (TypeLoadException e)
            {
                Console.WriteLine("Unknow Car. Exception: - {0}", e.Message);
            }
            return myCar;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Programm Started:");
            Console.WriteLine("---------------------------------------");
            Console.WriteLine("");

            string strClass = "Bus";
            ICar myCar = CarFactory.BuildCar(strClass);
            //myCar.Say();


            Console.WriteLine("");
            Console.WriteLine("---------------------------------------");
        }
    }
}




以下为运行后的错误信息:
Programm Started:
---------------------------------------

Unknow Car. Exception: - 未能从程序集“ConsoleApplication2, Version=1.0.0.0, Cul
ture=neutral, PublicKeyToken=null”中加载类型“Bus”。

---------------------------------------
请按任意键继续. . .


求解。。。。。。

------解决方案--------------------
ICar obj1=(ICar)Activator.CreateInstance(System.Type.GetType ("ConsoleApplication1.Bus"));

------解决方案--------------------
重点是。。。。你的类型名称写错了。

不应该是 Bus 而应该是 ConsoleApplication1.Bus!

需要完整的类名,包括命名空间的完整类名。