Как скрыть метод GetType () от COM? - PullRequest
1 голос
/ 12 мая 2010

Я сделал надстройку автоматизации для 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

Итак, что я должен сделать, чтобы скрыть метод GetType () от COM?

Ответы [ 2 ]

0 голосов
/ 12 мая 2010

Вы должны ввести новый интерфейс COM и унаследовать от него свой класс с помощью ClassInterfaceType.None. Таким образом, вы будете показывать только методы в этом интерфейсе.

0 голосов
/ 12 мая 2010

Я думал, что COM использует интерфейсы и скрывает реализацию, поэтому я бы пошел с этим. Нет способа скрыть GetType так быстро, как я знаю.

...