Множественное наследование звучит, конечно, неплохо — кто же откажется от многочисленных богатых и престарелых родственников? Но в данном случае в эту фразу вкладывается совершенно иной смысл. Многие ADSI-объекты описаны в документации Microsoft как «реализующие множество интерфейсов» (implementing multiple interfaces).
На практике это означает, что объект заимствует методы и свойства от других, более простых объектов, а затем добавляет большинство из них в число своих собственных методов и свойств. Это весьма привлекательная составляющая систем объектно-ориентированного программирования, означающая, что объекты могут брать за основу свойства друг друга. Новый тип объекта может взять на себя предоставление нескольких дополнительных подробностей и позволить исходному объекту выполнить сложную задачу. При работе с ADSI это случается гораздо чаще, чем при работе со всеми остальными пакетами, рассматриваемыми в данной книге, и вы должны быть готовы к таким открытиям, иначе можно неверно истолковать документацию. Хорошим примером может послужить описание объекта IADsFileSenvice. В документации по IADsFileSenvice перечислены только два свойства: Descniption и MaxUsenCount. Но в описании объекта есть довольно сильное выражение: «IADsFileService is a dual interface that inherits from IADsService» (IADsFileSenvice является двойным интерфейсом, наследующим особенности IADsSenvice). Это означает, что объект IADsFileSenvice использует методы и свойства объекта IADsSenvice наряду с добавляемыми им свойствами Descniption и MaxUsenCount. Чтобы выяснить все остальное, нужно заглянуть в документацию по объекту IADsSenvice. Там вы найдете еще 12 свойств: HostComputen, DisplayName, Vension и т. д. Все они также применимы и к объекту IADsFileSenvice.
То же самое касается и различных объектов IADsxxxOpenations. В ADSI имеются объекты, представляющие общие папки, принтеры, системные службы и т. д. Когда эти ресурсы являются частью операционной системы, для которой ADSI может выполнять функции управления, объекты предоставляют еще один интерфейс Operations, добавляющий дополнительные управляющие свойства и методы. Сам объект IADsSenviceOpenations вы никогда не увидите, но вам придется сталкиваться с его методами и свойствами, доступными в объекте IADsSenvice.