And*_*iih 0 c# reflection polymorphism vsto
我已经编写了一些 VSTO (2003) 代码,这些代码根据邮件项目的附件成功地应用了一些强制性主题行更改。该代码是为在 microsoft.office.interop.outlook.mailitem 上操作而编写的但是,我需要相同的代码来操作其他类型,例如 microsoft.office.interop.outlook.appointmentitem(实际上它需要为任何用户可以发送具有主题的内容)。
假设 Outlook 项目类型具有主题属性、附件属性和保存方法,我该如何编写适用于所有相关 interop.outlook 类型的代码。
我尝试通过反射解决这个问题,但 GetProperty 正在返回 null 所以我不能在它上面使用 GetValue
? mi.GetType().GetProperty("主题") 空值 ?(mi as Microsoft.Office.Interop.Outlook.MailItem).主题 “考试科目”
似乎没有我可以投射到的通用 Outlookitem 类来执行此操作。正确的做法是什么?
编辑:为了澄清我的代码是这样开始的......
void Application_ItemSend(object Item, ref bool Cancel) { 如果(项目是 Microsoft.Office.Interop.Outlook.MailItem) { Microsoft.Office.Interop.Outlook.MailItem currentItem = 项目为 Microsoft.Office.Interop.Outlook.MailItem;
然后对 currentItem 执行操作(包括传递给当前使用 Microosft.Office.Interop.Outlook.MailItem 属性键入的各种函数。我希望它们处理“Microsoft.Interop.Outlook.somethingsendable”
这不会开箱即用 -AppointmentItem
并且MailItem
是完全不同的接口,因此多态性不是一种选择。
我能建议的最好方法是您创建一个SendableItem
自己的类来包装您需要支持的 PIA 接口,并将切换代码封装在您想要使用的“常见”操作的通用包装器后面。您可以使用 aMailItem
或 an创建一个 SendableItem ,AppointmentItem
但是一旦创建,它们从SendableItem
包装器的外部看起来是一样的。
归档时间: |
|
查看次数: |
612 次 |
最近记录: |