2010-05-12 45 views
1

我爲Excel創建了一個自動化插件,並且我製作了幾個函數(公式)。如何從COM中隱藏GetType()方法?

我有一個類頭看起來像這樣(這是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()方法?

回答

0

你應該引入一個新的COM接口,並從ClassInterfaceType.None繼承你的類。這樣你只會暴露該接口中的方法。

+0

你們都是對的,夥計! 我像你說的實現 - 接口WITHOUT ToString()等... 只有我需要的方法。 在我的課,我給自己定: [ClassInterface(ClassInterfaceType.None) [標記有ComVisible特性(真)] 公共類功能:IFunctions 和我實現了從IFunctions方法。 謝謝! – ticky 2010-05-12 12:09:05

0

我以爲COM使用接口和隱藏實現,所以我會去那。沒有辦法像我知道的那樣隱藏GetType。