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();
}

コンパイル時のVisualStudioのエラーメッセージは次のとおりです。

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

では、GetType()メソッドをCOMから非表示にするにはどうすればよいですか?

4

2 に答える 2

0

COMはインターフェイスを使用し、実装を非表示にすると思ったので、それを使用します。私が知っているように、GetTypeをfasとして非表示にする方法はありません。

于 2010-05-12T10:47:12.727 に答える
0

新しいCOMインターフェイスを導入し、そこからクラスを継承する必要がありますClassInterfaceType.None。このようにして、そのインターフェースのメソッドのみを公開します。

于 2010-05-12T11:02:41.687 に答える