【发布时间】:2009-11-21 19:37:29
【问题描述】:
有什么方法可以防止o.GetType() 在类型为内部且位于另一个程序集中的对象上调用时引发异常?
我将基于 COM 的 API 包装在 .Net 程序集中,以便可以从更多本机 .Net 集成(集合接口、流、异常等)中受益。原始 API 的集合已按以下方式包装:
internal class ComItems : IList<ComItem>
{
internal ComItems(ComApi.ComItems unmanaged) { this.unmanaged = unmanaged; }
public void Add(ComItem item) {
this.unmanaged.Add(-1, item.ToUnmanaged());
}
// Rest of the IList implementation
}
由于有几个这样的集合,我希望将它们公开为IList<T> 的实例,并将原始类型保持为内部,这样它们就不会弄乱命名空间。这里的问题是,在返回的 IList<T> 对象之一上调用 GetType() 会导致异常,因为基础类型是内部类型。
有什么方法可以防止这个异常吗?
有什么方法可以强制 GetType 返回typeof(IList<T>) 吗?不确定这是否更好,因为它与标准行为不同。
我了解减少混乱的一种替代方法是将集合分离到另一个命名空间中。不幸的是,一些集合包含额外的方法,并作为公共类型公开。这要么意味着集合被划分在两个不同的命名空间(主要的一个和“内部”)之后,要么它们都在“内部”一个之后,当人们需要那些专门的集合时,他们会导入那个命名空间,而那些简单的集合就会变得混乱再次智能感知。
【问题讨论】:
标签: c# .net interop assemblies