[英]Interface inheritance in ComVisible classes in C#
无法从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添加到接口IB,一切正常,但那么继承点是什么呢? 或者我在这里做错了什么?
我正在从COM Interop窃取这个问题的答案:在类似的问题“C#暴露给COM - 接口继承”中给出的没有暴露给COM链接的基类属性
特别是该网站上的MVP声明:
在COM接口中可以相互继承。 但是,向.NET公开.NET接口的.NET实现不支持继承。 因此,您必须将基接口中的任何接口成员复制到派生接口...在构建公开的COM接口时,互操作代码不会查看基接口类型。
它确实提出了一些解决方法,例如从两个接口继承,或实现“本机”TLB(在IDL中编写接口并使用MIDL编译它 - 在vis studio中应该有这样的项目)。
代码似乎很好,它应该按预期工作,除了你已经省略了两个属性的返回类型,它们应该是:
[ComVisible]
public abstract class Base : IA
{
public string P1{get{return "somestring";}}
}
[ComVisible]
public class Concrete : Base, IB
{
public string P2{get{return "P2somestring";}}
}
但我认为这只是你在帖子中写的代码中的一个忽略。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.