【问题标题】:How to hide GetType() method from COM?如何从 COM 隐藏 GetType() 方法?
【发布时间】:2011-02-18 13:31:52
【问题描述】:

我为 Excel 制作了一个自动化插件,并制作了几个函数(公式)。

我有一个类,它的标题看起来像这样(它是 COM 可见的):

[ClassInterface(ClassInterfaceType.AutoDual)]
[ComVisible(true)]
public class Functions
{}

在方法列表中,我看到:

 ToString(), Equals(), GetHashCode() and GetType() methods.

由于我的类的所有方法都是 COM 可见的,我应该以某种方式隐藏这 4 个。 我成功了其中的 3 个:

ToString(), Equals(), GetHashCode()

但 GetType() 不能被覆盖。

这是我对其中 3 个所做的:

 [ComVisible(false)]
 public override string ToString()
 {
    return base.ToString();
 }

 [ComVisible(false)]
 public override bool Equals(object obj)
 {
   return base.Equals(obj);
 }

 [ComVisible(false)]
 public override int GetHashCode()
 {
   return base.GetHashCode();
 }

这不起作用:

[ComVisible(false)]
public override Type GetType()
{
  return base.GetType();
}

这是编译时 Visual Studio 中的错误消息:

..GetType()': cannot override inherited member 'object.GetType()' because it is not marked virtual, abstract, or override

那么,我应该怎么做才能对 COM 隐藏 GetType() 方法?

【问题讨论】:

    标签: com hide excel-formula gettype


    【解决方案1】:

    您应该引入一个新的 COM 接口并使用 ClassInterfaceType.None 从它继承您的类。这样,您将只公开该接口中的方法。

    【讨论】:

    • 你们俩都是对的,伙计们!我像你说的那样实现了 - 没有 ToString() 等的接口......只有我需要的方法。在我的课堂上,我设置了: [ClassInterface(ClassInterfaceType.None)] [ComVisible(true)] public class Functions : IFunctions,我从 IFunctions 实现了方法。谢谢!
    【解决方案2】:

    我认为 COM 使用了接口并隐藏了实现,所以我会这样做。据我所知,没有办法隐藏 GetType。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      相关资源
      最近更新 更多