日期:2014-05-17  浏览次数:20723 次

请教一个很具体的问题,关于对象列表的读取和处理
本帖最后由 vivorimage 于 2013-04-13 19:41:52 编辑
最近小弟做一个电路仿真的小程序,需要从文件中读取系统结构,例如文本文件中包含以下信息:
G1 AND a b d
G2 NOT c e
G3 OR d e z
每行第一项是门的名称,第二项是门的类型,后面是输入输出端口
现在我的方法是这样的,有一个抽象的Class Gate,然后各个类型的门,如AndGate、OrGate、NotGate等均继承Gate,然后又做了个全局列表List<Gate> gateList,希望每次读到文件中的相关信息时就创建一个相应的门的对象,并添加到gateList中,如:
if(类型 == AND)

AndGate g1 = new Gate();
gateList.Add(g1);
}
现在的问题是每次读到AND类型的门时都要将对象命名为g1?这显然不合适,很想用这种方式添加:
gateList.Add(new AndGate());
可惜肯定是编译错误,因为不能这样实例化。后考虑将各个门做成静态类,也不行,静态类不能实例化,而且是个全局量。
哎,着实把我难坏了,求指点。
对象 列表

------解决方案--------------------
呃,其实把这个东西微软已经做了很多有意思的工作
1.linq 的expression已经包含你这东西的绝大部分token,你在把provider写一下,如果有漏掉滴在稍微扩展一下基本可以用
2.DLR尤其是irnopython,如果使用这个基本上你完全不必担心
3.Roslyn --这是好东西
4.antlr3---这也是好东西(不是微软做,但同样是好东西)现在居然可以在mvc4里看到这东西存在,谁说微软封闭,不接收外部存在滴!!

好了不说废话了,回到你原先的问题,你不过不想new,这个简单。hashtable就ok,hash里有就不new直接取,没有就new
------解决方案--------------------
AndGate g1 = new Gate();
gateList.Add(g1);
上面和下面根本没有区别啊!
gateList.Add(new AndGate());
------解决方案--------------------
应该这样定义gateList:
List<Gate> gateList = new List<Gate>();