IHTMLDocument - это интерфейс, который по сути является «неразрывным» контрактом, который представляет то, что будет предоставлять объект, который его реализует.
Изменение интерфейса при переходе на новую версию кода нарушит этот контракт и, в свою очередь, нарушит код, который опирается на этот контракт.
Предположим, вы создали:
public interface IMyInterface {
public int Property1 { get; set; }
}
Год спустя вам нужно добавить Property2, но вы не можете изменить свой интерфейс. Так что один из способов это создать:
public interface IMyInterface2 {
public int Property2 { get;set; }
}
и затем с вашим старым классом, который реализует IMyInterface:
public class MyObject : IMyInterface, IMyInterface2 {
public int Property1 { get {} set {} }
public int Property2 { get {} set {} }
}
Тогда вы не нарушите старый контракт, но сможете использовать новый интерфейс в коде, таком как:
if (obj is IMyInterface) {
Console.WriteLine(((IMyInterface)obj).Property1);
if (obj is IMyInterface2) {
//more
}
}
Так вот, что сделала Microsoft. Библиотека mshtml, в которой находится IHTMLDocument, является библиотекой COM, а COM сильно зависит от интерфейсов. Так как библиотека развивалась, Microsoft добавляла все больше и больше интерфейсов для предоставления новых функций / кода.
IHTMLTxtRange - это интерфейс для наиболее часто используемого TextRange объекта.
Он предоставляет множество функций для разбора текста «Фрагменты» или «Диапазоны».
http://www.webreference.com/js/column12/trmethods.html