我使用的是什么:
VB.NET,NET 3.5,OpenXML的SDK 2.0如果只知道接口/抽象类,如何从具体实现中获取不同的值类型?
我想做的事:
我创造了我的应用程序的XLSX读/写器(基于OpenXML的SDK 2.0)。我想读取xlsx文件并将包含在每行中的数据存储在DTO/PONO中。此外,我想读取xlsx文件,然后修改并保存它。
我的想法:
现在我的问题是不是与OpenXML的SDK,我可以做我需要做的。
我的问题是如何构建我的组件。具体而言,我在电子表格的最低级别单元格处遇到多态性问题。
Excel/OpenXML中的单元格可以具有与其关联的不同类型的数据。像时间,日期,数字,文字或公式。从电子表格读取/写入时,需要对这些不同的类型进行不同的处理。
我决定像TextCell,NumberCell,DateCell等
所有亚型的通用接口现在,当我从电子表格中读取电池的方法/工厂可以决定创建哪种类型的细胞。
现在因为单元是真实实现的抽象,所以它不知道/不需要知道它是什么类型。对于编写/修改单元格,我通过在要保存的单元格上调用.write(ICellWriter)来解决此问题。由于单元本身知道它包含的是什么类型的数据,它知道它需要调用哪种ICellWriter方法(静态polymorpism)。
我的问题:
写入到XLSX文件是没有问题的。我的问题是,如何将数据从我的单元转移到我的DTO/PONO中,而无需通过类型检查 - >If TypeOf variable is ClassX then doesomething End If
。由于方法/属性必须具有不同的签名,并且仅通过使用不同的返回类型进行区分是不被允许的。
编辑:
的对象(指的细胞)不知道具体实现的持有人(集合,在这种情况下,表/电子表格的行)。所以为了编写一个单元格,我把它传给了一个Cellwriter。这台Cellwriter的重载方法如Write(num as Integer)
,Write(text as String)
,Write(datum as Date)
。传递给它的单元对象然后使用它所保存的数据类型调用Write()
方法。这是有效的,因为没有返回值被传回。
但是当我需要返回的具体数据类型时该怎么办?
任何想法,建议,见解?
感谢
编辑:
名词解释:
- DTO:数据Transfere对象
- PONO:传统.NET对象
- XLSX:指文件的Excel工作簿的结局文件
编辑:
细胞“亚型”实现一个通用的接口,并不从一个共同的超类继承。
编辑:
经过对这个问题的一些思考后,我开始意识到,如果没有反思或知道我期待的是什么类型的细胞,这是不可能的。基本上我试图重新创建一个电子表格或类似的功能和方式太抽象/配置为我的需要。感谢您的时间&努力写出答案。我接受了最接近我意识到的答案。
PONO代表什么? – 2011-02-28 10:51:06
我在我的问题结尾添加了词汇表,希望有所帮助。 – Chipmunk 2011-02-28 11:02:37
我知道这并不直接回答这个问题,但为什么不使用ado.net读取excel文件呢?有什么特殊情况,为什么你不能这样做? – Dom 2011-02-28 15:40:22