2010-04-18 17 views
1

根據this article關於在.Net中編寫外殼擴展的問題,繼承了shell接口,正如您在編寫代碼時自然會做的那樣無效。我在我自己的代碼中也觀察到了這一點。爲什麼在編寫c#中的shell擴展時接口不繼承工作?

不起作用:

public interface IPersist { 
    // stuff specific only to IPersist 
} 

public interface IPersistFolder : IPersist { 
    // stuff specific only to IPersistFolder 
} 

是否工作:

public interface IPersistFolder { 
    // stuff specific to IPersist only 
    // stuff specific to IPersistFolder only 
} 

文章指出這樣一個事實:

你瞧,它的工作!請注意, 我已經放棄了任何想法,即 IPersistFolder從 繼承而來,只是在IPersist的 定義中包含了 存根。在所有的坦率,我不能 告訴你爲什麼這是,但它絕對 工程就好,不應該給你 任何問題。

所以我會問這個傢伙不知道的問題; 爲什麼沒有原代碼的工作?

+0

是的,我已經非常清楚在pre.Net 4天內編寫託管外殼擴展的危險,所以不要因此而出現偏差。 – 2010-04-18 02:53:45

回答

3

COM不支持繼承。 COM接口聲明是在帶有繼承的SDK頭文件中定義的,但它們旨在由C++編譯器進行分析。它支持繼承。 IPersistFile接口的具體實現必須提供所有方法的實現,包括來自IUnknown和IPersist的方法。 IUnknown由CLR負責。