首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我可以继承一个类来向Generics提供com-互操作吗?

我可以继承一个类来向Generics提供com-互操作吗?
EN

Stack Overflow用户
提问于 2014-10-06 19:01:46
回答 1查看 86关注 0票数 1

我有一个类,它包含许多公共xxx作为列表( someType)。这在我们的代码中被广泛使用。不幸的是,我还需要以ArrayList的形式提供这些列表,因为我们需要在VBA (特别是Excel)中访问相同的对象。

我熟悉抽象和重写/新,但这意味着要修改大量已经实现的代码,并在我看来,创建大量额外的代码(这些代码中可能有50个)来抽象对象,而事实上,在这种情况下,使用了99%的时间。

基本的问题是..。

代码语言:javascript
运行
复制
public class cProp
    private Eyes as List(Of Integer)
    public property Eyes as List(Of Integer)
        'get and set that does a lot of work
    end property
    'repeat 50 times
end class

几乎我们所有的代码都使用cProp,因此编写一个50项的抽象基类,其中没有任何其他内容,似乎只会引入bug。所以理想情况下我想要.

代码语言:javascript
运行
复制
<ClassInterface(ClassInterfaceType.AutoDual)>
public class dProp
    inherits cProp
    public readonly property **something** Eyes as ArrayList
        'convert List to ArrayList
    end property
end class

如果有这样的事,我还没弄明白。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-07 14:28:59

这不可能。COM不支持泛型,对泛型接口或类(直接或间接)的调用将导致E_NOINTERFACE错误。在定义可互选类型时,下面是可以而不是所做的事情:

  • 从COM访问通用接口。
  • 访问从泛型类派生的非通用类的类接口。
  • 为泛型类生成类接口。例如,不能为_FooBar类生成Foo<Bar>接口。

虽然.NET实现可能使用泛型类型,但只能向COM公开非泛型版本。在将IEnumerable<int>IList<int>公开给COM时,让类接口从IList继承(或将其用作属性类型)。这个接口是COM兼容的,泛型版本实现了它,所以您可以在.NET端保持类型安全,并使用COM中的非泛型版本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26222992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档