IHTMLDocument ist eine Schnittstelle, bei der es sich im Wesentlichen um einen "unbrechbaren" Vertrag handelt, der darstellt, was das Objekt, das sie implementiert, bereitstellen wird.
Eine Änderung der Schnittstelle beim Wechsel zu einer neuen Version des Codes würde diesen Vertrag brechen und damit auch den Code, der sich auf diesen Vertrag stützt.
Angenommen, Sie erstellen :
public interface IMyInterface {
public int Property1 { get; set; }
}
Ein Jahr später müssen Sie Property2 hinzufügen, aber Sie können Ihre Schnittstelle nicht ändern. Eine Möglichkeit, das zu umgehen, ist die Erstellung von:
public interface IMyInterface2 {
public int Property2 { get;set; }
}
und dann mit Ihrer alten Klasse, die IMyInterface implementiert:
public class MyObject : IMyInterface, IMyInterface2 {
public int Property1 { get {} set {} }
public int Property2 { get {} set {} }
}
Dann brechen Sie nicht den älteren Vertrag, sondern können die neue Schnittstelle in Code wie z.B.:
if (obj is IMyInterface) {
Console.WriteLine(((IMyInterface)obj).Property1);
if (obj is IMyInterface2) {
//more
}
}
Und genau das hat Microsoft getan. Die mshtml-Bibliothek, in der IHTMLDocument enthalten ist, ist eine COM-Bibliothek, und COM ist stark auf Schnittstellen angewiesen. Als sich die Bibliothek also weiterentwickelte, fügte Microsoft mehr und mehr Schnittstellen hinzu, um neuere Funktionen/Code freizulegen.
IHTMLTxtRange ist eine Schnittstelle für die am häufigsten verwendete TextRange Objekt. Es stellt eine Reihe von Funktionen zum Parsen von Text-"Fragmenten" oder "Bereichen" zur Verfügung.
http://www.webreference.com/js/column12/trmethods.html