C# C中ComVisible类中的接口继承#

C# C中ComVisible类中的接口继承#,c#,com,interface,C#,Com,Interface,无法从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"

无法从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);
}
试试看{
var obj=新的ActiveXObject(“混凝土”);

WshShell.Popup(obj.P1);//代码似乎很好,应该按照预期工作,当然,除了您省略了两个属性的返回类型之外,它们应该是:

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

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

但我认为这只是你在文章中编写的代码中的一个疏忽。

我从非常类似的问题中给出的链接中窃取了这个问题的答案

该站点的MVP特别指出:

COM中的接口可以相互继承。但是,将.NET接口公开给COM的.NET实现不支持继承。因此,必须将基本接口中的任何接口成员复制到派生接口…在构建公开的COM接口时,互操作代码不会查看基接口类型。


它确实建议了一些解决方法,比如从两个接口继承,或者实现一个“本机”TLB(用IDL编写接口并用MIDL编译-在vis studio中应该有这样的项目)。

现在是否值得删除这个答案?