IHTMLDocument ist eine Schnittstelle, die im Wesentlichen ein "unzerbrechlicher" Vertrag ist, der darstellt, was das Objekt, das es implementiert, bereitstellt.
Das Ändern der Schnittstelle beim Wechsel zu einer neuen Version des Codes würde diesen Vertrag brechen und wiederum den Code zerstören, der auf diesem Vertrag beruht.
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 nicht Ihre Schnittstelle ändern. So ein Weg, um das schaffen:
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 werden Sie nicht den älteren Vertrag brechen, aber die neue Schnittstelle in Code verwenden kann wie zum Beispiel:
if (obj is IMyInterface) {
Console.WriteLine(((IMyInterface)obj).Property1);
if (obj is IMyInterface2) {
//more
}
}
Also das ist, was Microsoft getan hat. Die Mshtml-Bibliothek, in der sich IHTMLDocument befindet, ist eine COM-Bibliothek, und COM ist stark auf Schnittstellen angewiesen. Als die Bibliothek weiterentwickelt wurde, fügte Microsoft immer mehr Schnittstellen hinzu, um die neuere Funktionalität/den neuen Code verfügbar zu machen.
IHTMLTxtRange ist eine Schnittstelle für das häufiger verwendete Objekt TextRange. Es bietet eine Reihe von Funktionen zum Parsen von Text "Fragmente" oder "Bereiche".
http://www.webreference.com/js/column12/trmethods.html