Почему наследование интерфейса не работает при написании расширений оболочки в c #? - PullRequest
1 голос
/ 18 апреля 2010

Согласно этой статье о написании расширений оболочки в .Net, наследование интерфейсов оболочки, как вы, естественно, делаете, когда написание кода не работает. Я наблюдал это и в своем собственном коде.

Не работает:

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 прямо в его определение. Во всей откровенности я не могу сказать вам, почему это так, но это определенно работает просто отлично и не должен давать вам любые проблемы.

Итак, я задам вопрос, которого этот парень не знал; почему оригинальный код не работал?

1 Ответ

3 голосов
/ 18 апреля 2010

COM не поддерживает наследование. Объявления интерфейса COM определены в заголовочных файлах SDK с наследованием, но они предназначены для анализа компилятором C ++. поддерживает наследование. Конкретная реализация интерфейса IPersistFile должна обеспечивать реализацию всех методов, включая методы от IUnknown и IPersist. IUnknown заботится CLR.

...