1

我为 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() 方法呢?

4

2 回答 2

0

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

于 2010-05-12T10:47:12.727 回答
0

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

于 2010-05-12T11:02:41.687 回答