关于泛型的T类型问题! 你可以试一试RTTI,比如System.Activator的用法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果你的这些类共有一个基类的话,就可以用工厂模式,根据反射来创建对应名称的类了给你段代码参考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(); } } } } 大家帮忙看一下 Josephus算法,感觉有点不懂! [源码][原创]C#做的桌面工具 C#中如何使用汽泡提示? 如何得到包含在完整路径名中的文件名? 无法将类型“int”隐式转换为“string” 格式化字符串問題 如何实现类似于Outlook联系人那样的卡片视图 急:c#中如何调用sqlserver的数据导入导出 关于DataGrid的问题,使用过DataGrid的朋友进来看看! 我在程序中加载了图片文件.如何在程序中调用! ???????? C#的BUG吗?相的的程序有不同的结果?太奇怪了...
给你段代码参考
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();
}
} }
}