2014-06-17 199 views
2

是否可以讓一個類的成員僅對COM可見,即不可以對託管代碼進行操作?這裏有一個具體的例子:從.NET代碼隱藏成員,但不從COM隱藏成員

說我有一個Widget類與DateSubmitted屬性是可空日期(即DateTime?);它可能尚未「提交」,因此DateSubmitted的值可能是null。當我從另一個託管程序集引用我的程序集時,我想使用此屬性。但是,當我從COM環境(例如VBA)引用我的程序集時,該屬性將不可用,因爲COM不知道.NET中的可空類型。

理想情況下,我想擁有另一個屬性,它只是一個普通的「日期」類型,因此它對COM可見並且可能是一個布爾標誌,用於向COM API用戶指示日期爲空時的狀態,而且我不希望這些屬性在.NET中可用。

我想我想知道的是,是否有一個屬性或者什麼東西,也許在System.Runtime.InteropServices某處,這將允許我有效地隱藏.NET成員,但使它在COM中可用。

+0

我認爲你的意思是相反:你想隱藏一個成員從COM可見但仍然可見的.NET。 –

回答

3

不,成員必須是public可以從COM服務器使用。這是一個相當簡單的解決方法,COM客戶端只能看到接口,.NET程序員看到類。所以你可以在接口中公開DateTime方法,並在類中明確地實現它,所以它不公開。並提供一個公共版本的DateTime?在課堂上的爭論。

另外請記住,您通過爲其提供[ComVisible(false)]屬性來隱藏COM客戶端的方法。您可以通過爲其提供[EditorBrowsable(EditorBrowsableState.Never)]屬性來隱藏.NET程序員的方法。隱藏在IntelliSense彈出窗口中。