gpt4 book ai didi

c# - C# 中 ComVisible 类中的接口(interface)继承

转载 作者:太空狗 更新时间:2023-10-29 22:56:12 27 4
gpt4 key购买 nike

无法从 w/cscript 访问继承属性 (P1)。

类结构看起来像这样:

[ComVisible]
public interface IA
{
string P1{get;}
}

[ComVisible]
public interface IB : IA
{
string P2{get;}
}

[ComVisible]
public abstract class Base : IA
{
public string P1{get{return "somestring";}}
}

[ComVisible]
public class Concrete : Base, IB
{
public string P2{get{return "P2somestring";}}
}

js文件中的客户端代码:

try{
var obj = new ActiveXObject("Concrete");
WshShell.Popup(obj.P1); //<-- displays empty string
}catch(e)
{
WshShell.Popup(e.description);
}

如果我将属性 P1 添加到接口(interface) IB,一切正常,但是继承的意义何在呢?或者我在这里做错了什么?

最佳答案

我从 COM Interop: Base class properties not exposed to COM 中窃取了这个问题的答案非常相似的问题中给出的链接 "C# exposing to COM - interface inheritance"

特别是该网站上的 MVP 指出:

In COM interfaces can inherit from one another. However the .NET implementation that exposes the .NET interface to COM does not support inheritance. Therefore you must replicate any interface members in a base interface to the derived interface... The interop code does not look at base interface types when building the exposed COM interface.

它确实提出了一些解决方法,例如从两个接口(interface)继承,或实现“ native ”TLB(用 IDL 编写接口(interface)并用 MIDL 编译它——vis studio 中应该有这方面的项目)。

关于c# - C# 中 ComVisible 类中的接口(interface)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1399928/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com