你可以试一试RTTI,比如System.Activator的用法。

解决方案 »

  1.   

    如果你的这些类共有一个基类的话,就可以用工厂模式,根据反射来创建对应名称的类了
    给你段代码参考
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Reflection;namespace WinShape
    {
        public abstract class Shape
        {
            public abstract string Draw();        public static Shape Create(string name)
            {
                return ShapeFactory.CreateShape(name);        }
        }
        public class Line : Shape
        {        public override string Draw()
            {
                return "Draw Line:  -----------------";
            }
        }    public class Circle : Shape
        {
            public override string Draw()
            {
                return "Draw Circle: OOOOOOOOOOOOOOOO";
            }
        }    public class Triangle : Shape
        {
            public override string Draw()
            {
                return "Draw Triangle: ^^^^^^^^^^^^^^";
            }
        }    internal abstract class ShapeFactory
        {
            private static Dictionary<string, ShapeFactory> factories = new Dictionary<string, ShapeFactory>();        protected abstract Shape GetShape();        internal static Shape CreateShape(string shapeName)
            {
                   //double check to prevent create multiple instances by multiple threads
                   if(!factories.ContainsKey(shapeName)) 
                   {
                       lock (factories)
                       {
                           if (!factories.ContainsKey(shapeName))
                           {
                               Assembly assembly = Assembly.GetExecutingAssembly();
                               Type t = assembly.GetType(string.Format("WinShape.ShapeFactory+{0}Factory", shapeName));
                               if (t == null)
                                   return null;
                               ShapeFactory factory = System.Activator.CreateInstance(t) as ShapeFactory;
                               factories.Add(shapeName, factory);
                           }
                       }
                   }               ShapeFactory fac = factories[shapeName];
                   return fac.GetShape();
            }        private class LineFactory : ShapeFactory
            {
                protected override Shape  GetShape()
                {
                    return new Line();
                }
            }        private class CircleFactory : ShapeFactory
            {
                protected override Shape GetShape()
                {
                    return new Circle();
                }
            }        private class TriangleFactory : ShapeFactory
            {
                protected override Shape GetShape()
                {
                    return new Triangle();
                }
            }    }    
        
    }